摘要:文章提出一個對象關(guān)系數(shù)據(jù)庫系統(tǒng)模型:在業(yè)務(wù)邏輯層和關(guān)系數(shù)據(jù)庫的物理存儲結(jié)構(gòu)中間增加一個OR代理層,代理層為用戶應(yīng)用程序提供統(tǒng)一接口,并結(jié)合RDBMS透明地完成對象和關(guān)系數(shù)據(jù)庫之間的轉(zhuǎn)換,解決對象數(shù)據(jù)的存儲查詢等操作。文章對OR代理的關(guān)鍵內(nèi)容即模型結(jié)構(gòu)和映射規(guī)則進行了定義和描述。
關(guān)鍵詞:面向?qū)ο螅魂P(guān)系數(shù)據(jù)庫;對象關(guān)系數(shù)據(jù)庫;映射
一、前言
隨著數(shù)據(jù)庫技術(shù)的發(fā)展,數(shù)據(jù)庫應(yīng)用領(lǐng)域已經(jīng)從傳統(tǒng)的商務(wù)數(shù)據(jù)處理擴展到許多新的應(yīng)用領(lǐng)域,例如處理空間數(shù)據(jù)、時間數(shù)據(jù)、工程設(shè)計數(shù)據(jù)、超文本和多媒體數(shù)據(jù)等,原有的數(shù)據(jù)庫系統(tǒng)很難適應(yīng)這些新的應(yīng)用領(lǐng)域中的復(fù)雜對象和這些對象的復(fù)雜行為的需求。新的應(yīng)用需求推動了數(shù)據(jù)庫技術(shù)的研究,其中最重要的研究方向之一就是使用一種與人們認識客觀事物的過程一致的方法,這就是面向?qū)ο蟮姆椒ǎ敲嫦驅(qū)ο蠹夹g(shù)與數(shù)據(jù)庫技術(shù)相結(jié)合的產(chǎn)物。在適應(yīng)計算機應(yīng)用的現(xiàn)實特性和發(fā)展趨勢上,面向?qū)ο蟮姆椒ū憩F(xiàn)出了多方面特有的優(yōu)越性,它的興起從整體上反映和概括了計算機發(fā)展的歷史。
面向?qū)ο蠹夹g(shù)能夠大大提高軟件開發(fā)的效率及其可靠性、可維護性、可重用性,越來越多的軟件開發(fā)機構(gòu)和科研人員開始使用面向?qū)ο蠹夹g(shù)進行系統(tǒng)分析、設(shè)計、編制程序。然而在數(shù)據(jù)庫領(lǐng)域,面向?qū)ο髷?shù)據(jù)庫產(chǎn)品卻未真正成熟,關(guān)系數(shù)據(jù)庫產(chǎn)品依然是開發(fā)MIS的必然選擇。占主導(dǎo)地位的關(guān)系數(shù)據(jù)庫成為了面向?qū)ο笙到y(tǒng)架構(gòu)中對象與關(guān)系數(shù)據(jù)庫轉(zhuǎn)換的“瓶頸”。將oo(object oriented)技術(shù)的優(yōu)越性與成熟的關(guān)系數(shù)據(jù)庫技術(shù)有機地結(jié)合起來,是一個很有應(yīng)用價值的研究課題。本文提出一個對象關(guān)系數(shù)據(jù)庫系統(tǒng)模型:在業(yè)務(wù)邏輯層和關(guān)系數(shù)據(jù)庫的物理存儲結(jié)構(gòu)中間增加一個OR代理層,代理層為用戶應(yīng)用程序提供統(tǒng)一接口,并結(jié)合RDBMS透明地完成對象和關(guān)系數(shù)據(jù)庫之間的轉(zhuǎn)換,解決對象數(shù)據(jù)的存儲查詢等操作。
二、面向?qū)ο髷?shù)據(jù)庫發(fā)展
?。ㄒ唬┟嫦?qū)ο髷?shù)據(jù)特點
Peter Coad和Edward Yourdon這樣描述面向?qū)ο螅好嫦驅(qū)ο?對象+分類+繼承+消息。其中對象指一組屬性及這組屬性上專用操作的封裝體。類是一組具有相同屬性和操作的對象描述。繼承是類之間一種基本關(guān)系,指某個類的層次關(guān)聯(lián)中不同類共享屬性和操作的機制。消息是對象間通信的手段,一個對象通過向另一個對象發(fā)送消息來請求其服務(wù)。此外,面向?qū)ο髷?shù)據(jù)特點還有封裝、信息隱蔽、消息傳遞、多態(tài)性等。綜上所述,面向?qū)ο髷?shù)據(jù)與現(xiàn)實世界實體對象一一對應(yīng),具有傳統(tǒng)數(shù)據(jù)庫數(shù)據(jù)不具有的兩大特性,即內(nèi)容海量性和結(jié)構(gòu)復(fù)雜性,它們是構(gòu)建新型數(shù)據(jù)庫的基礎(chǔ)。
?。ǘ﹤鹘y(tǒng)數(shù)據(jù)庫局限性
1、不能表示客觀世界復(fù)雜對象。采用二維表表示數(shù)據(jù)及其關(guān)系,語義表示能力差,無法表示客觀世界復(fù)雜對象,不能揭示數(shù)據(jù)之間深層含義和內(nèi)在聯(lián)系,缺乏數(shù)據(jù)抽象。
2、缺少對復(fù)雜數(shù)據(jù)類型支持。只能理解、存儲和處理簡單數(shù)據(jù)類型,不能根據(jù)客戶需要動態(tài)擴大數(shù)據(jù)集。碰到復(fù)雜問題常利用高級程序設(shè)計語言構(gòu)造相應(yīng)數(shù)據(jù)類型和操作,既加重用戶負擔,又不能保證數(shù)據(jù)一致性。
3、數(shù)據(jù)結(jié)構(gòu)不能與行為相關(guān)聯(lián)。對象有兩方面內(nèi)容,即結(jié)構(gòu)和行為。傳統(tǒng)DB把前者映射到數(shù)據(jù)庫模式中,對后者沒有很好實現(xiàn)。
4、阻抗失配和語義斷層,不能與高級程序設(shè)計語言無縫集成。傳統(tǒng)DB開發(fā)需同時使用數(shù)據(jù)庫語言(SQL)和高級程序設(shè)計語言,涉及模式和結(jié)構(gòu)轉(zhuǎn)換問題,既容易丟失原數(shù)據(jù)結(jié)構(gòu)語義,又妨礙其他工具和用戶在原有語義層次上共享數(shù)據(jù)。
5、缺乏管理知識和對象的能力。傳統(tǒng)DB處理對象是確定的、現(xiàn)存的,不能很好地處理和管理實際應(yīng)用中的二義性、未知對象。此外,它們沒有演繹和推理功能,不能很好地管理知識,無法滿足MIS,DSS,OA和AI等領(lǐng)域進行高層管理和決策的要求。
6、不能滿足巨型數(shù)據(jù)庫應(yīng)用需要。隨著多媒體技術(shù)、空間信息科學(xué)和數(shù)據(jù)挖掘技術(shù)等學(xué)科的蓬勃興起,處理的海量數(shù)據(jù)已非一般二維表可存儲和管理,而且數(shù)據(jù)結(jié)構(gòu)越來越復(fù)雜,有的還有語義動作,使傳統(tǒng)數(shù)據(jù)庫顯得力不從心。
另外,傳統(tǒng)數(shù)據(jù)庫還不能主動檢查和處理事件,缺乏對長事務(wù)和多重嵌套事務(wù)的響應(yīng)和處理能力。
綜上所述,傳統(tǒng)數(shù)據(jù)庫已不能滿足復(fù)雜的實際應(yīng)用需要,隨著面向?qū)ο笱芯康纳钊?,把面向?qū)ο笤O(shè)計方法和數(shù)據(jù)庫技術(shù)結(jié)合形成新一代數(shù)據(jù)庫系統(tǒng)——面向?qū)ο髷?shù)據(jù)庫系統(tǒng),不僅是數(shù)據(jù)庫學(xué)科發(fā)展需要,也是推進計算機其他分支健康發(fā)展的必然結(jié)果。
?。ㄈ┟嫦?qū)ο髷?shù)據(jù)庫概念
面向?qū)ο髷?shù)據(jù)庫系統(tǒng)(OODBS)支持定義和操作OODB,應(yīng)滿足兩個標準:首先它是數(shù)據(jù)庫系統(tǒng),其次它也是面向?qū)ο笙到y(tǒng)。第一個標準即作為數(shù)據(jù)庫系統(tǒng)應(yīng)具備的能力(持久性、事務(wù)管理、并發(fā)控制、恢復(fù)、查詢、版本管理、完整性、安全性)。第二個標準就是要求面向?qū)ο髷?shù)據(jù)庫充分支持完整的面向?qū)ο螅∣O)概念和控制機制。
綜上所述,我們將面向?qū)ο髷?shù)據(jù)庫簡寫為:面向?qū)ο髷?shù)據(jù)庫=面向?qū)ο笙到y(tǒng)+數(shù)據(jù)庫能力。
三、面向?qū)ο髷?shù)據(jù)庫技術(shù)——對象關(guān)系數(shù)據(jù)庫
?。ㄒ唬┫到y(tǒng)模型
系統(tǒng)模型(如圖1所示),包括3個層次:業(yè)務(wù)邏輯層、OR代理層和物理存儲層。
1、業(yè)務(wù)邏輯層。業(yè)務(wù)邏輯層是程序開發(fā)人員或者用戶所接觸的接口層,在這個層次上是完全的面向?qū)ο髢?nèi)容。業(yè)務(wù)邏輯層由很多接口組成,例如應(yīng)用程序接口是專門為特定的應(yīng)用程序開發(fā)的面向?qū)ο蠼涌?;領(lǐng)域接口針對具體的應(yīng)用領(lǐng)域,它與領(lǐng)域有關(guān)(或垂直定向),例如有些領(lǐng)域接口用于健康保健上的應(yīng)用程序,它們僅適用于這個領(lǐng)域;其他一些接口適用于金融、制造業(yè)、通信等領(lǐng)域。業(yè)務(wù)邏輯層還可以包括其他類型的接口,例如多領(lǐng)域接口表明它們適用于多個領(lǐng)域。
2、OR代理層。OR代理層是系統(tǒng)的關(guān)鍵層和核心層。它是與領(lǐng)域無關(guān)的(或水平定向的)代理層,用于完成OO和RDB的相互映射和轉(zhuǎn)換。它由4個模塊組成:預(yù)處理/后續(xù)處理模塊;OSQL/SQL轉(zhuǎn)換器;OO/RDB映射轉(zhuǎn)換器;RDBMS是成熟的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。
3、物理存儲層。系統(tǒng)的最底層是物理存儲層。在數(shù)據(jù)存儲的結(jié)構(gòu)上,仍然采用關(guān)系數(shù)據(jù)庫的形式??梢?,該系統(tǒng)模型是對傳統(tǒng)關(guān)系數(shù)據(jù)庫的擴展,是把面向?qū)ο蠹夹g(shù)與關(guān)系數(shù)據(jù)庫相結(jié)合而建立的一個對象關(guān)系數(shù)據(jù)庫管理系統(tǒng)(ORDBMS)。其具有以下優(yōu)點:(1)與純粹的面向?qū)ο髷?shù)據(jù)庫管理系統(tǒng)(OOD2BMS)相比,系統(tǒng)充分考慮結(jié)合了現(xiàn)有RDBMS的優(yōu)點,并且在當前的數(shù)據(jù)庫理論和技術(shù)現(xiàn)狀下,具有更好的可實現(xiàn)性;(2)與當前普遍使用的兩層構(gòu)架模型相比,該系統(tǒng)的邏輯更加清晰。同時,由于OR映射層對業(yè)務(wù)邏輯層提供了統(tǒng)一的面向?qū)ο蠼涌?,用戶和程序員編碼時可以將更多的精力放在具體領(lǐng)域的業(yè)務(wù)實現(xiàn)上而不是關(guān)系數(shù)據(jù)庫與類實例的轉(zhuǎn)換上。
?。ǘ┯成湟?guī)則
OR映射是系統(tǒng)的關(guān)鍵功能,而OO/RDB映射轉(zhuǎn)換器是實現(xiàn)該功能的主要模塊。因此,根據(jù)面向?qū)ο罄碚摵完P(guān)系數(shù)據(jù)庫的特點,重點討論和制定映射規(guī)則??傮w映射思路如表1所示:
1、沒有繼承關(guān)系的類映射規(guī)則:對于沒有繼承關(guān)系的一個類映射為一個表,其中表名取類名,對象標識符對應(yīng)表的一個主鍵,表的對象屬性對應(yīng)表列且以屬性名作為列名。另外,因為表中的列除了來自該對象的屬性外,可能會因為關(guān)聯(lián)、概括等關(guān)系而有所擴充,因此表列個數(shù)應(yīng)大于或等于屬性個數(shù)。同樣原因,表的主碼可能包括除對象標識符對應(yīng)主鍵以外的其他鍵。
2、類層次映射。對于存在繼承關(guān)系的3個類OA、OB和OC,不妨設(shè)OA是OB和OC的共同父類,則該類層次映射到數(shù)據(jù)表,可以根據(jù)具體情況的不同采用以下三個規(guī)則:(1)將整個類層次映射為單個數(shù)據(jù)表,表中包括所有類(基類、子類)的屬性。該規(guī)則的優(yōu)點是實現(xiàn)簡單,且支持多態(tài),而且因為表中包含了所有信息,報表操作簡單。缺點是增加了類層次中的耦合,類層次中任何類屬性的更改會導(dǎo)致表結(jié)構(gòu)的更改,即會影響到整個層次結(jié)構(gòu)而不僅僅是該類的子類;浪費了大量的數(shù)據(jù)庫存儲空間。(2)將處于繼承層次最底層的各個具體類分別映射到一個數(shù)據(jù)表,每一個表包含OID、具體類本身的屬性和它繼承的屬性,而抽象的基類則不參與映射。該規(guī)則的優(yōu)點是報表操作實現(xiàn)簡單,表中包含了具體子類的所有信息.缺點是類的修改會導(dǎo)致其所有子類對應(yīng)表的更改;角色的更改會造成ID的重新賦值(因為不同子類的ID可能重復(fù));難以在支持多重角色時保持數(shù)據(jù)的完整性。(3)每個類均映射為一個數(shù)據(jù)庫表,表中包含特定于該類的屬性和OID,其父類的OID也作為外鍵存在與表中,作為指針指向該類從父類所繼承屬性的屬性值。該規(guī)則與面向?qū)ο蟾拍畹囊恢滦约皩Χ鄳B(tài)的支持最好,易于修改基類和增加新的類。缺點是映射后的數(shù)據(jù)庫中存在大量的表,系統(tǒng)訪問對象屬性時要涉及多個表,需要較長的時間,對報表的支持較差。
3、類方法和類事件映射規(guī)則:方法和事件是其值不能靜態(tài)存儲在數(shù)據(jù)庫中而只能動態(tài)執(zhí)行相關(guān)程序計算得到的一種特殊的屬性。在標準RDB模型中并沒有支持用戶自定義函數(shù)和過程的機制??尚业氖嵌嗄陙硪恍┥虡I(yè)化RDBMS產(chǎn)品已提供了這些功能,SQL標準也開始考慮包含這一功能,成為PSM子程序(包括了用戶自定義函數(shù)和過程),這樣就能夠建立方法和事件定義到PSM子程序定義的映射中。另外,方法調(diào)用的一個顯著特性就是多態(tài),即動態(tài)捆綁。因此,僅把方法和事件調(diào)用映射為相應(yīng)的PSM子程序調(diào)用是不夠的,需要在方法調(diào)用被映射后的目標代碼中包含PSM子程序以及該子程序調(diào)用的動態(tài)解決方案。一般的方法是將方法調(diào)用映射為case語句,在case語句中列出所有捆綁的條件和各種情況下相關(guān)PSM子程序的調(diào)用。類方法和事件的映射是與語言相關(guān)的程序翻譯問題,與具體的RDBMS相關(guān),因此需要人工來完成。
4、類間關(guān)系映射。類間關(guān)系有很多種,例如繼承、組裝、聚合等等。規(guī)則2處理了繼承關(guān)系,對于其他的所有關(guān)系可以歸結(jié)為三種類型:一對一、一對多和多對多關(guān)系。類間關(guān)系映射為一個關(guān)系表,規(guī)則如下:如果兩個對象之間存在一對一關(guān)聯(lián),則在兩個對象映射表中任選一個加入另一個對象映射表的主鍵作為自己的外鍵;如果兩個對象之間存在一對多關(guān)聯(lián),則在“多”方對象映射表中加入“一”方對象映射表的主鍵作為外鍵;如果兩個對象之間存在多對多關(guān)聯(lián),則產(chǎn)生對應(yīng)該關(guān)聯(lián)的表,它由兩個對象對應(yīng)表的所有主鍵組成,并以它們作為自己的主鍵。
四、結(jié)束語
對象關(guān)系數(shù)據(jù)庫系統(tǒng)模型為OR映射提供了明確的思路和有章可循的方法,能夠有效降低實際開發(fā)難度和工作量、規(guī)范映射模型、使業(yè)務(wù)邏輯部分和數(shù)據(jù)存儲部分達到了松耦合。
面向?qū)ο髷?shù)據(jù)庫和關(guān)系數(shù)據(jù)庫之間的運算轉(zhuǎn)換,在多重數(shù)據(jù)庫互操作研究中是一個重要的環(huán)節(jié)。本文中,討論了對象關(guān)系數(shù)據(jù)庫的體系結(jié)構(gòu)及其映射規(guī)則。這些工作對于對象關(guān)系數(shù)據(jù)庫的實際應(yīng)用具有一定的現(xiàn)實意義。
參考文獻:
1、王意潔.面向?qū)ο蟮臄?shù)據(jù)庫技術(shù)[M].北京:電子工業(yè)出版社,2003.
2、Ian Graham著,袁兆山譯.面向?qū)ο蠓椒ㄔ砼c實踐[M].北京:機械工業(yè)出版社,2003(3).
3、Scott.W.Ambler著,車皓陽、劉銳譯.面向?qū)ο筌浖_發(fā)教程[M].北京:機械工業(yè)出版社,2003(3).
?。ㄗ髡邌挝唬汉惫I(yè)大學(xué)計算機學(xué)院)