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