毛金玲
摘要:實(shí)現(xiàn)基于關(guān)系數(shù)據(jù)庫的信息(關(guān)鍵字)檢索,將使用戶不需要任何SQL語言和底層數(shù)據(jù)庫模式的知識,就像使用搜索引擎一樣來獲取數(shù)據(jù)庫中的相關(guān)數(shù)據(jù)。關(guān)系數(shù)據(jù)庫的關(guān)鍵字檢索技術(shù)已經(jīng)成為目前數(shù)據(jù)庫領(lǐng)域中的一個(gè)研究重點(diǎn)。
關(guān)鍵詞:關(guān)系數(shù)據(jù)庫? 關(guān)鍵詞查詢? 數(shù)據(jù)庫模式
1 系統(tǒng)總體設(shè)計(jì)
面向關(guān)系數(shù)據(jù)庫的關(guān)鍵字查詢系統(tǒng)主要有五部分組成,首先要分析輸入的關(guān)鍵字,有幾個(gè)關(guān)鍵字組成;然后調(diào)用全文索引,查看這些關(guān)鍵字所屬,是表名、屬性名還是屬性值;接下來查詢數(shù)據(jù)庫的模式圖,從而得到幾種可能的元組連接樹;最后將相應(yīng)元組連接樹轉(zhuǎn)化成SQL語句查詢關(guān)系數(shù)據(jù)庫,生成查詢結(jié)果,以二維表格形式顯示。由上述內(nèi)容可得系統(tǒng)流程圖如圖1所示。
2 數(shù)據(jù)庫設(shè)計(jì)
本系統(tǒng)為面向關(guān)系數(shù)據(jù)庫的關(guān)鍵字查詢系統(tǒng),在實(shí)驗(yàn)中本文選取了IMDB 數(shù)據(jù)集,為了進(jìn)行實(shí)驗(yàn),將數(shù)據(jù)集整理為以下七個(gè)表數(shù)據(jù)結(jié)構(gòu)。
實(shí)驗(yàn)數(shù)據(jù)集(電影信息數(shù)據(jù)庫):Actor(演員表)、Consume(設(shè)計(jì)師)、Director(導(dǎo)演信息)、Business(投資)、Editor(編輯)、Color(顏色信息)、Keyword(關(guān)鍵詞)。
本數(shù)據(jù)庫抽象的數(shù)據(jù)庫關(guān)系E-R圖如圖2所示。
圖2為數(shù)據(jù)庫關(guān)系的E-R圖。在圖中,黃色鑰匙為每個(gè)表的主鍵,黑線部分為表之間外鍵關(guān)系,設(shè)定除business表外每個(gè)表都有一個(gè)外鍵mvname,而在抽象出的關(guān)系圖中,以mvname和episode為數(shù)據(jù)庫每個(gè)表之間最重要的聯(lián)系,即表之間關(guān)系以mvname和episode屬性為聯(lián)系。
3 數(shù)據(jù)庫索引設(shè)計(jì)
在關(guān)系型數(shù)據(jù)庫中,例如Oracle、DB2、SQL Server 和MySQL等都提供了對關(guān)鍵字查詢的擴(kuò)展,可以為數(shù)據(jù)庫的表屬性建立全文索引,這為實(shí)現(xiàn)關(guān)系數(shù)據(jù)庫的關(guān)鍵字查詢提供了基礎(chǔ)。已有多個(gè)關(guān)系數(shù)據(jù)庫的關(guān)鍵字查詢系統(tǒng)被開發(fā)出來,BANKS、DISCOVER、IR-style、SEKKER等等。然而在已有的系統(tǒng)中,多數(shù)系統(tǒng)僅僅支持?jǐn)?shù)據(jù)庫中文本屬性的查詢,卻忽略了對數(shù)據(jù)庫中元數(shù)據(jù)的處理。如果用戶給定的查詢關(guān)鍵字是數(shù)據(jù)庫中的元數(shù)據(jù),則有些系統(tǒng)就不能夠滿足用戶的查詢需求,或者查詢結(jié)果不夠精確,返回大量與查詢不相關(guān)的結(jié)果。SEKKER雖然提出了支持?jǐn)?shù)字屬性和元數(shù)據(jù)的查詢,但是卻在查詢語言上做了限定,只能通過給定的查詢語言格式進(jìn)行查詢,所以系統(tǒng)的靈活性不高。
關(guān)鍵字{“Color”“Director”}的索引結(jié)構(gòu)如表1所示。
表1? 關(guān)鍵字{“Color”“Director”}的索引結(jié)構(gòu)
■
4 數(shù)據(jù)庫模式圖的構(gòu)建
在關(guān)系數(shù)據(jù)庫中,關(guān)鍵字是通過主外鍵進(jìn)行連接的,因此關(guān)系數(shù)據(jù)庫采用的數(shù)據(jù)模型,即為基于模式圖建模。模式圖的節(jié)點(diǎn)對應(yīng)數(shù)據(jù)庫中的關(guān)系,邊表示關(guān)系間的主外鍵約束。
模式圖(Schema Graph,GS)是將關(guān)系數(shù)據(jù)庫的模式信息定義為模式圖GS(V,E),其中V表示模式圖中的節(jié)點(diǎn),與數(shù)據(jù)庫中的關(guān)系一一對應(yīng),E表示模式圖中的邊,將具有主外碼約束相對應(yīng)的關(guān)系連接起來,關(guān)系Ri和關(guān)系Rj中的主外鍵關(guān)系對應(yīng)模式圖一條邊Ri→Rj。
本文數(shù)據(jù)庫對應(yīng)的數(shù)據(jù)庫模式圖如圖3所示。
5 關(guān)鍵字檢索設(shè)計(jì)
關(guān)鍵字檢索技術(shù)主要是,通過分析用戶輸入的關(guān)鍵字所屬類型來確定元組連接樹,從而轉(zhuǎn)換成相應(yīng)的SQL語句來查詢關(guān)系數(shù)據(jù)庫。如果用戶輸入的關(guān)鍵字都是表名,則將幾個(gè)表自然連接后輸出即可;若用戶輸入的關(guān)鍵字有表名、屬性名,那么將屬性列加到表中輸出就是用戶所檢索的內(nèi)容;若用戶輸入的關(guān)鍵字中有屬性值,則將屬性值對應(yīng)屬性與表或?qū)傩粤羞B接,根據(jù)屬性值對應(yīng)元組來顯示查詢結(jié)果。由此可見,對于相同的關(guān)鍵字,如果它不止一種所屬值,那么它就會對應(yīng)不同的SQL語句。
6 結(jié)果生成設(shè)計(jì)
在本文中,將查詢結(jié)果定義為元組連接樹。給定一個(gè)數(shù)據(jù)庫模式圖GS,一個(gè)元組連接樹T是一棵元組樹。其中,T中的每一條邊(ti,tj)(ti∈Ri,tj∈Rj)滿足以下兩個(gè)要求:①(Ri,Rj)∈GS,②ti∞tj∈Ri∞Rj。同時(shí)這些元組連接樹滿足以下條件:①完整性:用戶提交的所有關(guān)鍵字均出現(xiàn)在元組連接樹上;②最小性:從元組連接樹中移除任何元組后的元組連接樹都不具有完整性。
元組連接樹生成規(guī)則偽代碼如下:
Data Structure:
Result:Generate JTT
1:Known set of JTT by GS((Ri,Rj)∈GS)
2:Known Keyword{k1,k2}
3:if(k1=ti,k2=tj(ti∈Ri,tj∈Rj))
4:generate(ti,tj)
5:end if
7 結(jié)束語
本文將生成的關(guān)系圖轉(zhuǎn)換為SQL查詢,通過執(zhí)行相應(yīng)的查詢,進(jìn)而得到每個(gè)關(guān)系路徑對應(yīng)的查詢結(jié)果。因?yàn)殛P(guān)系圖是按照關(guān)聯(lián)度進(jìn)行返回的,但是這樣關(guān)聯(lián)度僅僅的將關(guān)鍵字映射在關(guān)系的層面上,為了使查詢結(jié)果更加明確,本文將結(jié)果進(jìn)行細(xì)化,將關(guān)鍵字映射到關(guān)系層面。為了避免大量冗余結(jié)果的產(chǎn)生,為了更精確的滿足用戶的查詢需求,將與關(guān)鍵字關(guān)系有關(guān)系的結(jié)果返回給用戶即可。
參考文獻(xiàn):
[1]林子雨,楊冬青,王騰蛟,張東站.基于關(guān)系數(shù)據(jù)庫的關(guān)鍵詞查詢[J].軟件學(xué)報(bào),2010(10).
[2]林子雨,鄒權(quán),賴永炫,林琛.關(guān)系數(shù)據(jù)庫中的關(guān)鍵詞查詢結(jié)果動(dòng)態(tài)優(yōu)化[J].軟件學(xué)報(bào),2014(03).
[3]李慧穎,瞿裕忠.基于關(guān)鍵詞的RDF數(shù)據(jù)查詢方法[J].東南大學(xué)學(xué)報(bào)(自然科學(xué)版),2010(02).