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