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