一種支持布爾表達(dá)式查詢的數(shù)據(jù)庫管理系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及數(shù)據(jù)庫管理系統(tǒng)(DBMS),具體涉及一種支持布爾表達(dá)式查詢的數(shù)據(jù)庫 管理系統(tǒng)。
【背景技術(shù)】
[0002] 近年來,企業(yè)通過開發(fā)信息系統(tǒng)來提升管理水平,改善用戶體驗(yàn)等。這些系統(tǒng)在廣 泛使用的同時(shí)產(chǎn)生了大量的數(shù)據(jù)。目前,存儲并管理這些數(shù)據(jù)的主要方法是通過數(shù)據(jù)庫管 理系統(tǒng)。
[0003] 信息系統(tǒng)開發(fā)的核心環(huán)節(jié)之一在于數(shù)據(jù)庫模式(Schema)設(shè)計(jì),即:根據(jù)"實(shí)體-關(guān) 系(ER) "模型設(shè)計(jì)表結(jié)構(gòu)。數(shù)據(jù)庫模式的確定意味著對企業(yè)業(yè)務(wù)活動和數(shù)據(jù)流轉(zhuǎn)的確認(rèn)。 然而,對數(shù)據(jù)庫模式的設(shè)計(jì)無法做到"一勞永逸"一一即企業(yè)很難在系統(tǒng)設(shè)計(jì)之初就預(yù)見到 未來業(yè)務(wù)變更、擴(kuò)展所帶來的數(shù)據(jù)庫模式的調(diào)整。不僅如此,信息系統(tǒng)經(jīng)過一段較長時(shí)間的 使用,數(shù)據(jù)庫中已經(jīng)存儲了大量的數(shù)據(jù),此時(shí),對已有數(shù)據(jù)庫模式哪怕進(jìn)行細(xì)微的調(diào)整,如 對列的增減,往往都會帶來巨大的I/O開銷,甚至變更失敗。以下,我們通過一個(gè)實(shí)例對該 問題作進(jìn)一步的認(rèn)識。
[0004] 下表一為某企業(yè)的用戶表Consumer_old,其表結(jié)構(gòu)為系統(tǒng)開發(fā)之初設(shè)計(jì):
[0005] 表一 :Consumer_old 用戶表
[0006]
[0007] 隨著企業(yè)業(yè)務(wù)發(fā)展,為了掌握用戶對企業(yè)產(chǎn)品的興趣,該企業(yè)希望在上述 C〇nsumer_〇ld表上進(jìn)行擴(kuò)展,使得擴(kuò)展后的數(shù)據(jù)表(如表二所示)可以便利的記錄用戶對 企業(yè)產(chǎn)品的興趣。
[0008] 表二:Consumer 用戶表
[0009]
[0010] 不難發(fā)現(xiàn),Interest列是一個(gè)特殊的列,它引用了多個(gè)屬性,如MODEL,PRICE, YEAR以及MILEAGE ;并且通過"邏輯與"關(guān)系將這些屬性連接成布爾表達(dá)式以此表明用戶對 特定產(chǎn)品的興趣。然而,雖然Interest列為信息系統(tǒng)開發(fā)及數(shù)據(jù)庫管理提供了更加靈活的 方式,但是傳統(tǒng)的數(shù)據(jù)庫管理系統(tǒng)并不能很好地支持對Interest列的定義,查詢。
[0011] 目前主流的DBMS中,僅Oracle在其IOg以上版本的數(shù)據(jù)庫管理系統(tǒng)中,通過支持 EVALUATE OPERATOR來實(shí)現(xiàn)更加靈活的數(shù)據(jù)查詢與結(jié)構(gòu)拓展。簡言之:該方案通過支持"布 爾表達(dá)式"列,在SQL查詢的基礎(chǔ)上,嵌套進(jìn)布爾表達(dá)式的判定,為數(shù)據(jù)庫模式的擴(kuò)展和查詢 提供了較大的靈活性。然而,在實(shí)際使用中該方案依然存在如下約束:
[0012] DEVALUATE列是一個(gè)基于多個(gè)普通列的復(fù)合列,因此,定義EVALUATE列時(shí)必須提 前知道普通列;此外EVALUATE關(guān)鍵詞不支持區(qū)間值查詢;
[0013] 2)對EVALUATE列進(jìn)行擴(kuò)展時(shí),其引用到的普通列所在表必須為空表;
[0014] 3)對EVALUATE列的查詢,查詢條件必須對每一子項(xiàng)(普通列)進(jìn)行判斷才會正確 返回結(jié)果,否則系統(tǒng)返回錯(cuò)誤提示。
【發(fā)明內(nèi)容】
[0015] 本發(fā)明針對傳統(tǒng)技術(shù)中數(shù)據(jù)庫管理系統(tǒng)存在的問題,提出一種支持布爾表達(dá)式查 詢的數(shù)據(jù)庫管理系統(tǒng),實(shí)現(xiàn)在不改變數(shù)據(jù)庫模式的情況下,可以靈活的引入新的屬性來標(biāo) 注數(shù)據(jù)對象,并將SQL查詢與布爾表達(dá)式的判斷進(jìn)行無縫銜接。
[0016] 本發(fā)明解決上述技術(shù)問題所采用的方案是:一種支持布爾表達(dá)式查詢的數(shù)據(jù)庫管 理系統(tǒng),嵌套有支持布爾表達(dá)式查詢的查詢系統(tǒng)BESystem,所述查詢系統(tǒng)BESystem用于支 持布爾表達(dá)式列的定義,使得在不改變數(shù)據(jù)庫模式的情況下,可以靈活的引入新的屬性來 標(biāo)注數(shù)據(jù)對象;還用于通過特定的數(shù)據(jù)表示和索引結(jié)構(gòu)支持對布爾表達(dá)式的判斷,以及將 SQL查詢與布爾表達(dá)式的判斷進(jìn)行無縫銜接。
[0017] 具體的,所述查詢系統(tǒng)BESystem支持特定的數(shù)據(jù)表示的方式為:
[0018] 查詢系統(tǒng)BESystem創(chuàng)建并維護(hù)三種表,分別是:
[0019] 表Tb:根據(jù)最初的ER關(guān)系所設(shè)計(jì)的數(shù)據(jù)表,其不含布爾表達(dá)式列,并且數(shù)據(jù)表中 的每一條記錄由唯一的ID標(biāo)識;
[0020] 表Tfn:存儲布爾表達(dá)式所引用的屬性組,其表結(jié)構(gòu)為:name, pid ;T fn表的兩個(gè)屬 性分別對應(yīng)布爾表達(dá)式所引用屬性的名稱及ID ;
[0021] 表Tbf:存儲布爾表達(dá)式內(nèi)容,其表結(jié)構(gòu)為:ID,bform ;
[0022] 其中,表Tbf與表T b通過ID關(guān)聯(lián),即T bf表存儲T b表中每條記錄的布爾表達(dá)式。
[0023] 具體的,所述BESystem還用于將形如"Ρ Θ 'a' "的interest列轉(zhuǎn)換為形如"定位 數(shù)組I值域"的形式,并將轉(zhuǎn)換后的內(nèi)容以字符串形式存儲在Tbf表的bform列。
[0024] 具體的,所述BESystem通過索引結(jié)構(gòu)支持對布爾表達(dá)式的判斷的方式為:
[0025] BESystem對出現(xiàn)在布爾表達(dá)式列的屬性(P)構(gòu)建基于B+樹的索引Neglndex,用 于快速篩選不滿足查詢條件的數(shù)據(jù)。
[0026] 具體的,所述BESystem將SQL查詢與布爾表達(dá)式的判斷進(jìn)行無縫銜接的方式為:
[0027] BESystem將對布爾表達(dá)式的判斷融入到SQL查詢句中。
[0028] 本發(fā)明的有益效果是:在DBMS之上建立一個(gè)靈活的支持布爾表達(dá)式查詢的數(shù)據(jù) 庫管理系統(tǒng)BESystem ;該系統(tǒng)通過支持對特殊列的定義、查詢,實(shí)現(xiàn)在不改變數(shù)據(jù)庫模式 的情況下,可以靈活的引入新的屬性來標(biāo)注數(shù)據(jù)對象,并將SQL查詢與布爾表達(dá)式的判斷 進(jìn)行無縫銜接。
【附圖說明】
[0029] 圖1為BESystem系統(tǒng)架構(gòu)圖;
[0030] 圖2為屬性Price的NegIndex結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0031] 本發(fā)明旨在針對傳統(tǒng)技術(shù)中數(shù)據(jù)庫管理系統(tǒng)存在的問題,提出一種支持布爾表達(dá) 式查詢的數(shù)據(jù)庫管理系統(tǒng),實(shí)現(xiàn)在不改變數(shù)據(jù)庫模式的情況下,可以靈活的引入新的屬性 來標(biāo)注數(shù)據(jù)對象,并將SQL查詢與布爾表達(dá)式的判斷進(jìn)行無縫銜接。
[0032] 本發(fā)明在DBMS的基礎(chǔ)上嵌套了支持布爾表達(dá)式查詢的查詢系統(tǒng)BESystem,該查 詢系統(tǒng)BESystem的系統(tǒng)構(gòu)架如圖1所示,下面分別介紹該系統(tǒng)的各個(gè)功能構(gòu)架:
[0033](一)數(shù)據(jù)表示及索引構(gòu)建:
[0034] (I)數(shù)據(jù)表示方式:
[0035] 為了更好地支持對數(shù)據(jù)表T的模式擴(kuò)展,BESystem支持一個(gè)特定的形似布爾表達(dá) 式的列,從而使得在任意階段,對表T的擴(kuò)展,無需作任何數(shù)據(jù)庫層面的修改。
[0036] 具體的數(shù)據(jù)表示形式如下所示:BESystem創(chuàng)建并維護(hù)三種表,分別是:
[0037] 1)表Tb:根據(jù)最初的ER關(guān)系所設(shè)計(jì)的數(shù)據(jù)表,其不含布爾表達(dá)式列,并且數(shù)據(jù)表 中的每一條記錄由唯一的ID標(biāo)識;
[0038] 2)表Tfn:存儲布爾表達(dá)式所引用的屬性組,其表結(jié)構(gòu)(schema)為: name (STRING),pid(INTEGER)。Tfn表的兩個(gè)屬性分別對應(yīng)布爾表達(dá)式所引用屬性的名稱及 ID。表Tfn的數(shù)據(jù)量無疑是非常小的,因此可以快速加載,并始終駐留在內(nèi)存中;
[0039] 3)表Tbf:存儲布爾表達(dá)式內(nèi)容,其表結(jié)構(gòu)為:ID(INTEGER),bform(STRING)。表T bf 與表Tb通過ID關(guān)聯(lián),即T bf表存儲T b表中每條記錄的布爾表達(dá)式。
[0040] 例如:為了支持對表二(即Consumer用戶表)中Interest列的定義、查詢, BESystem首先將表一(即Consumer_old表)視為Tb表,表中的每條記錄由CID指定;然后 根據(jù)Interest列,構(gòu)建表T fn (見表三)和表Tbf (表四)。
[0041] 表三:1^表
[0042]
[0043] 表