摘 要:面向?qū)ο髷?shù)據(jù)庫系統(tǒng)是為了滿足新的數(shù)據(jù)庫應(yīng)用而產(chǎn)生的新一代數(shù)據(jù)庫系統(tǒng),通過設(shè)計(jì)面向?qū)ο髷?shù)據(jù)庫的理論概念和含義來構(gòu)建一個(gè)面向?qū)ο蟮臄?shù)據(jù)庫系統(tǒng)的理論體系,而面向?qū)ο髷?shù)據(jù)庫的模式設(shè)計(jì)方法又顯得尤為重要,它是在E-R模型的基礎(chǔ)上加入面向?qū)ο蟪绦蛟O(shè)計(jì)思想的繼承、構(gòu)成、消息傳遞、方法等成分后進(jìn)行的改進(jìn),產(chǎn)生了較為規(guī)范的根據(jù)需求生成擴(kuò)展的E-R模型和數(shù)據(jù)結(jié)構(gòu)方法,在設(shè)計(jì)過程中包括概念提取,概念分析,確定概念模型等,還包括消息傳遞和聯(lián)系的實(shí)現(xiàn)方法,以及擁有實(shí)例的確定法則,實(shí)例對方法的可行性檢驗(yàn)方法等。
關(guān)鍵詞:面向?qū)ο?;?shù)據(jù)庫;模式設(shè)計(jì)
中圖分類號:TP311.52
1 映射關(guān)系
在應(yīng)用領(lǐng)域中數(shù)據(jù)庫設(shè)計(jì)將面對的是更多更復(fù)雜的業(yè)務(wù)關(guān)系,面向?qū)ο髷?shù)據(jù)庫的模式設(shè)計(jì)是以實(shí)體對象進(jìn)行建模,它和具體的應(yīng)用領(lǐng)域中業(yè)務(wù)對象又是對應(yīng)的關(guān)系,所以對象關(guān)系模型也適應(yīng)于業(yè)務(wù)對象。對象基本關(guān)系模型根據(jù)業(yè)務(wù)對象之間的關(guān)系,將實(shí)體對象模型分成元實(shí)體對象模型和關(guān)聯(lián)實(shí)體對象模型。這些模型構(gòu)成了業(yè)務(wù)對象關(guān)系的基本框架。
在關(guān)系數(shù)據(jù)庫為基礎(chǔ)加入對象—關(guān)系映射引擎,將實(shí)體對象和關(guān)系表做一個(gè)映射,上層應(yīng)用操作實(shí)體對象,映射引擎操作具體的關(guān)系表,在整個(gè)過程中對象關(guān)系數(shù)據(jù)庫是自底向上的行為,由數(shù)據(jù)庫廠商實(shí)現(xiàn)。而對象關(guān)系映射是自上而下的行為,由應(yīng)用層來完成,核心技術(shù)就是OR映射,(1)將類映射成表。類到表的映射通常不是直接的。除非常簡單的數(shù)據(jù)庫以外,不會(huì)有類到表的一對一映射。(2)將屬性映射成列。類屬性將映射成關(guān)系數(shù)據(jù)庫中相應(yīng)的列,且這些屬性都不是持久的。(3)在面向?qū)ο笾袑⒙?lián)系轉(zhuǎn)換成類/對象,表示聯(lián)系的類用來記錄對象之間的對應(yīng)關(guān)系,在程序運(yùn)行過程中起到對象之間的映射作用,聯(lián)系類應(yīng)該具備如下基本特性:用來存儲(chǔ)對應(yīng)關(guān)系的數(shù)據(jù)結(jié)構(gòu),有這個(gè)數(shù)據(jù)結(jié)構(gòu)的維護(hù)機(jī)制,有足夠的查詢機(jī)制。
在面向?qū)ο髷?shù)據(jù)庫的邏輯設(shè)計(jì)階段,采用面向?qū)ο蟮臄?shù)據(jù)模型來表述邏輯設(shè)計(jì)的結(jié)果,在概念設(shè)計(jì)階段采用對應(yīng)擴(kuò)展ER模型,而擴(kuò)展ER模型主要用來分析有關(guān)應(yīng)用信息需求和構(gòu)造高級數(shù)據(jù)模型,也就是對傳統(tǒng)ER模型進(jìn)行的擴(kuò)展。其中擴(kuò)展ER模型有靜態(tài)元素、動(dòng)態(tài)元素的擴(kuò)展和構(gòu)成的加入,靜態(tài)元素的加入相當(dāng)于繼承,而繼承又是用來聯(lián)系2個(gè)或者2個(gè)以上實(shí)體型(一對多關(guān)系),通過比較規(guī)范的設(shè)計(jì)得到擴(kuò)展ER模型中實(shí)體型與屬性和方法的拓?fù)浣Y(jié)構(gòu)就是深度為2的樹,如下圖1:
圖1 實(shí)體繼承
據(jù)繼承的傳遞性,一個(gè)實(shí)體型實(shí)際繼承了層次結(jié)構(gòu)中在其上面的所有實(shí)體型的全部性質(zhì)。擴(kuò)展ER模型動(dòng)態(tài)元素的擴(kuò)展包括方法和消息傳遞的加入,面向?qū)ο笾械姆椒ㄏ喈?dāng)于函數(shù),用來描述實(shí)體行為特性和某種操作的程序,例如:教師實(shí)體型中職稱和學(xué)歷相當(dāng)于方法,其屬性也可以進(jìn)行new。而消息傳遞的加入是用來一對一的有向聯(lián)系兩個(gè)實(shí)體型,也可以用來處理實(shí)體執(zhí)行某一處理的請求或回答某些信息的要求,例如:教師實(shí)體向?qū)W生實(shí)體發(fā)送問題消息,要求學(xué)生解答。
構(gòu)成的加入是用來聯(lián)系2個(gè)或者2個(gè)以上實(shí)體型,其形式是實(shí)體型之間的一對多的聯(lián)系,區(qū)別于繼承的是不具有層次結(jié)構(gòu)上面的性質(zhì),在特性方面是疊加的,因?yàn)橛羞@樣一概念,才能實(shí)現(xiàn)面向?qū)ο蟮膹?fù)雜結(jié)構(gòu)、較高的數(shù)據(jù)抽象能力和結(jié)構(gòu)上較高的靈活性。當(dāng)一個(gè)實(shí)體型包含有其他實(shí)體型時(shí),稱這個(gè)實(shí)體型由其他實(shí)體型構(gòu)成,如下圖2:
圖2 實(shí)體構(gòu)成圖
擴(kuò)展的ER模型主要包括7個(gè)成分:實(shí)體型、對象標(biāo)識(shí)、屬性、方法、聯(lián)系、封裝、繼承、多態(tài)、構(gòu)成、消息傳遞,其中最重要的是封裝性、繼承性、多態(tài),,封裝性是將數(shù)據(jù)與操作封裝起來,提供類層次結(jié)構(gòu),建立不同層次的數(shù)據(jù)抽象,使用戶可以采用統(tǒng)一的模式去處理數(shù)據(jù)對象。這樣的模型也能更好的應(yīng)用到面向?qū)ο髷?shù)據(jù)庫的設(shè)計(jì)當(dāng)中。除了上述基本定義之外,為適應(yīng)非常規(guī)應(yīng)用領(lǐng)域,還需引入其他一些擴(kuò)展的特征,如長事務(wù)和協(xié)作等,它們充分體現(xiàn)了面向?qū)ο蟮奶卣鳌?/p>
概念圖型方法概念圖型方法
實(shí)體型
屬性
方法
聯(lián)系繼承
構(gòu)成
消息傳遞
圖3 擴(kuò)展ER模型圖形元素
在確定具體類和實(shí)例過程中引出新的問題:
將實(shí)體轉(zhuǎn)化成類以后,需要確定哪些類將有實(shí)例/對象存在,如果一個(gè)類成為超類后,其子類將繼承所有特性,但不再擁有實(shí)例/對象,所以子類完全有能力表達(dá)超類能夠表達(dá)的信息,同時(shí)也證明超類已經(jīng)不能滿足信息表達(dá)的需求,另外,指向沒有實(shí)例的類的聯(lián)系和向沒有實(shí)例的類發(fā)送消息是沒有意義的。
如果有消息發(fā)往沒有實(shí)例的類,則該消息應(yīng)改為發(fā)往原接收類的所有非超類的子類,如果有聯(lián)系指向沒有實(shí)例的類C1,設(shè)該類有n個(gè)非超類的子類C11,C12,…C1n,則該聯(lián)系用n個(gè)聯(lián)系代替,在n個(gè)聯(lián)系中原來指向C1的指針分別指向C11,C12,…C1n,其余不變。向沒有實(shí)例的類發(fā)送消息通過調(diào)用響應(yīng)消息的方法來實(shí)現(xiàn),發(fā)送消息還應(yīng)實(shí)現(xiàn)對接受消息的對象的檢索。
面向?qū)ο髷?shù)據(jù)庫的模式設(shè)計(jì)應(yīng)保持一定的約束,(1)同一模式中所有類的名字必須前后唯一,類中屬性名和方法名也必須唯一。(2)每個(gè)被引用的類必須在模式中定義、某操作代碼中調(diào)用的操作需給出說明、每一個(gè)說明的操作必須存在一個(gè)具體程序。(3)子類型約束:子類和父類(或超類)不能有環(huán)、不能有多繼承、單一超類必須加以說明,但在模式演進(jìn)操作過程中涉及類和超類成分和聯(lián)系以及類集的改變。
2 數(shù)據(jù)結(jié)構(gòu)與存儲(chǔ)
面向?qū)ο髷?shù)據(jù)庫的數(shù)據(jù)存儲(chǔ)在Windows文件管理等環(huán)境下實(shí)現(xiàn)一個(gè)數(shù)據(jù)庫與一個(gè)系統(tǒng)路徑相對應(yīng),一個(gè)業(yè)務(wù)對象與一個(gè)文件相對應(yīng),一個(gè)實(shí)例與一個(gè)文件記錄相對應(yīng)。在文件中封裝了有關(guān)對象文件的屬性和方法,文件框架中封裝了文件框架的屬性和方法,系統(tǒng)路徑組件封裝了有關(guān)對象路徑的屬性和方法。
面向?qū)ο髷?shù)據(jù)庫組件是由文件組件、文件框架組件和路徑組件組合的聚合組件,封裝了有關(guān)面向?qū)ο髷?shù)據(jù)庫的屬性和方法。用戶數(shù)據(jù)庫組件由面向?qū)ο髷?shù)據(jù)庫組件和用戶組件組合的聚合組件,封裝了有關(guān)用戶數(shù)據(jù)庫的屬性和方法。用戶組件封裝了有關(guān)用戶的屬性和方法。
面向?qū)ο髷?shù)據(jù)庫要求實(shí)現(xiàn)對大對象的存儲(chǔ),其主要區(qū)別于關(guān)系數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)中核心概念主要包括對象標(biāo)識(shí)、屬性方法、封裝、消息傳遞、類、繼承、構(gòu)成,但整個(gè)數(shù)據(jù)結(jié)構(gòu)又可分成三部分,用來描述類結(jié)構(gòu)的定義部分、用來描述方法的實(shí)現(xiàn)部分和用來描述實(shí)體的存儲(chǔ)部分。對于類的結(jié)構(gòu)描述可用關(guān)鍵字class…endclass來描述,如果這個(gè)類是超類則應(yīng)該在類名之前加上關(guān)鍵字inherit,如果是另一個(gè)類的構(gòu)成部分則應(yīng)在被構(gòu)成類之前加上關(guān)鍵字attributes。類的實(shí)例存儲(chǔ)即對象的存儲(chǔ)是通過以類為類型的表,即對象表來實(shí)現(xiàn)的,對象表的定義可以通過關(guān)鍵字table….end table來實(shí)現(xiàn)。表的元組記錄就對象,將對象的私有、公有成員,方法,構(gòu)成作為數(shù)據(jù)項(xiàng)。
面向?qū)ο髷?shù)據(jù)庫存儲(chǔ)的不僅是數(shù)據(jù),而且還存儲(chǔ)了定義在數(shù)據(jù)上的操作語義,以及對象之間的復(fù)雜引用和約束關(guān)系。在存儲(chǔ)方面,面向?qū)ο髷?shù)據(jù)庫不僅提供了傳統(tǒng)數(shù)據(jù)庫的全部服務(wù),還提供檢索對象時(shí)對象的拆卸與裝配。
圖4 存儲(chǔ)框架圖
3 適用領(lǐng)域及優(yōu)勢
面向?qū)ο蟮脑O(shè)計(jì)方法符合一般人的思維規(guī)律,即將現(xiàn)實(shí)世界分解成明確的實(shí)體對象,這些實(shí)體對象具有屬性和行為方法。能有效地表達(dá)客觀世界和提供多種視圖去訪問數(shù)據(jù),卻不需用復(fù)雜的查詢語句。比如金融服務(wù)業(yè)在進(jìn)行投資決策時(shí)要考慮投資的風(fēng)險(xiǎn)和回報(bào)等,這涉及大量復(fù)雜的數(shù)據(jù)信息,傳統(tǒng)的關(guān)系數(shù)據(jù)庫很難完成建模,查詢較慢,描述能力也相對落后,決策支持系統(tǒng)更不能滿足用戶的需要。
面向?qū)ο髷?shù)據(jù)庫還具有可維護(hù)性和可擴(kuò)展性好,在耦合性和內(nèi)聚性方面,面向?qū)ο髷?shù)據(jù)庫的性能尤為突出。這使得面向?qū)ο髷?shù)據(jù)庫設(shè)計(jì)者可在盡可能少影響現(xiàn)存代碼和數(shù)據(jù)的條件下修改對象模型和數(shù)據(jù)庫結(jié)構(gòu)。這種先進(jìn)的耦合性和內(nèi)聚性也簡化了不同硬件環(huán)境下數(shù)據(jù)庫的運(yùn)行。
又如醫(yī)療就診系統(tǒng)這種不是大眾的數(shù)據(jù)庫,病人和醫(yī)護(hù)人員的信息一般可以通過語音、視頻、數(shù)字圖象和傳統(tǒng)的文字?jǐn)?shù)據(jù)等來表達(dá),這些均是關(guān)系數(shù)據(jù)庫較難處理的,要把病人和醫(yī)護(hù)人員復(fù)雜的信息合理有效地存取,面向?qū)ο蠼鉀Q方案是將一組相關(guān)方法放入數(shù)據(jù)庫,以便基于這些信息隨時(shí)讀取而采取正確行動(dòng)。而這種面向?qū)ο髷?shù)據(jù)庫的用戶又主要是從事系統(tǒng)軟件和高級應(yīng)用軟件開發(fā)的程序員和系統(tǒng)設(shè)計(jì)人員。
4 結(jié)束語
隨著應(yīng)用需求的擴(kuò)展,特別是諸如人工智能等復(fù)雜應(yīng)用的需要,關(guān)系型數(shù)據(jù)庫已經(jīng)顯得力不從心,面向?qū)ο髷?shù)據(jù)庫正好可以滿足用戶這方面的要求,進(jìn)而成為數(shù)據(jù)庫發(fā)展的一個(gè)方向。我國目前在操作系統(tǒng)和數(shù)據(jù)庫系統(tǒng)方面相對落后于他國的,特別是在面向?qū)ο髷?shù)據(jù)庫領(lǐng)域幾乎是一個(gè)空白。
參考文獻(xiàn):
[1]洪源,王秀美,李燦華.面向?qū)ο髷?shù)據(jù)庫的邏輯設(shè)計(jì)方法[J].北京科技大學(xué)學(xué)報(bào),2001(08).
[2]王意潔.面向?qū)ο蟮臄?shù)據(jù)庫技術(shù)[M].北京:電子工業(yè)出版社,2003.
[3]Jeffrey A.Hoffer,Mary B.Prescott,F(xiàn)red R.McFadden.現(xiàn)代數(shù)據(jù)庫管理(第8版)[M].北京:清華大學(xué)出版社,2008(05).
[4]趙耀紅.面向?qū)ο髷?shù)據(jù)庫的存儲(chǔ)結(jié)構(gòu)設(shè)計(jì)與實(shí)現(xiàn)[J].武漢理工大學(xué)學(xué)報(bào),2009(07).
作者簡介:張明輝(1977.04),男,湖南炎陵人,碩士,講師,研究方向:軟件工程、數(shù)據(jù)庫。
作者單位:廣東科技學(xué)院,廣東東莞 52300