摘要:文章提出一個對象關系數據庫系統模型:在業務邏輯層和關系數據庫的物理存儲結構中間增加一個OR代理層,代理層為用戶應用程序提供統一接口,并結合RDBMS透明地完成對象和關系數據庫之間的轉換,解決對象數據的存儲查詢等操作。文章對OR代理的關鍵內容即模型結構和映射規則進行了定義和描述。
關鍵詞:面向對象;關系數據庫;對象關系數據庫;映射
一、前言
隨著數據庫技術的發展,數據庫應用領域已經從傳統的商務數據處理擴展到許多新的應用領域,例如處理空間數據、時間數據、工程設計數據、超文本和多媒體數據等,原有的數據庫系統很難適應這些新的應用領域中的復雜對象和這些對象的復雜行為的需求。新的應用需求推動了數據庫技術的研究,其中最重要的研究方向之一就是使用一種與人們認識客觀事物的過程一致的方法,這就是面向對象的方法,它是面向對象技術與數據庫技術相結合的產物。在適應計算機應用的現實特性和發展趨勢上,面向對象的方法表現出了多方面特有的優越性,它的興起從整體上反映和概括了計算機發展的歷史。
面向對象技術能夠大大提高軟件開發的效率及其可靠性、可維護性、可重用性,越來越多的軟件開發機構和科研人員開始使用面向對象技術進行系統分析、設計、編制程序。然而在數據庫領域,面向對象數據庫產品卻未真正成熟,關系數據庫產品依然是開發MIS的必然選擇。占主導地位的關系數據庫成為了面向對象系統架構中對象與關系數據庫轉換的“瓶頸”。將oo(object oriented)技術的優越性與成熟的關系數據庫技術有機地結合起來,是一個很有應用價值的研究課題。本文提出一個對象關系數據庫系統模型:在業務邏輯層和關系數據庫的物理存儲結構中間增加一個OR代理層,代理層為用戶應用程序提供統一接口,并結合RDBMS透明地完成對象和關系數據庫之間的轉換,解決對象數據的存儲查詢等操作。
二、面向對象數據庫發展
(一)面向對象數據特點
Peter Coad和Edward Yourdon這樣描述面向對象:面向對象=對象+分類+繼承+消息。其中對象指一組屬性及這組屬性上專用操作的封裝體。類是一組具有相同屬性和操作的對象描述。繼承是類之間一種基本關系,指某個類的層次關聯中不同類共享屬性和操作的機制。消息是對象間通信的手段,一個對象通過向另一個對象發送消息來請求其服務。此外,面向對象數據特點還有封裝、信息隱蔽、消息傳遞、多態性等。綜上所述,面向對象數據與現實世界實體對象一一對應,具有傳統數據庫數據不具有的兩大特性,即內容海量性和結構復雜性,它們是構建新型數據庫的基礎。
(二)傳統數據庫局限性
1、不能表示客觀世界復雜對象。采用二維表表示數據及其關系,語義表示能力差,無法表示客觀世界復雜對象,不能揭示數據之間深層含義和內在聯系,缺乏數據抽象。
2、缺少對復雜數據類型支持。只能理解、存儲和處理簡單數據類型,不能根據客戶需要動態擴大數據集。碰到復雜問題常利用高級程序設計語言構造相應數據類型和操作,既加重用戶負擔,又不能保證數據一致性。
3、數據結構不能與行為相關聯。對象有兩方面內容,即結構和行為。傳統DB把前者映射到數據庫模式中,對后者沒有很好實現。
4、阻抗失配和語義斷層,不能與高級程序設計語言無縫集成。傳統DB開發需同時使用數據庫語言(SQL)和高級程序設計語言,涉及模式和結構轉換問題,既容易丟失原數據結構語義,又妨礙其他工具和用戶在原有語義層次上共享數據。
5、缺乏管理知識和對象的能力。傳統DB處理對象是確定的、現存的,不能很好地處理和管理實際應用中的二義性、未知對象。此外,它們沒有演繹和推理功能,不能很好地管理知識,無法滿足MIS,DSS,OA和AI等領域進行高層管理和決策的要求。
6、不能滿足巨型數據庫應用需要。隨著多媒體技術、空間信息科學和數據挖掘技術等學科的蓬勃興起,處理的海量數據已非一般二維表可存儲和管理,而且數據結構越來越復雜,有的還有語義動作,使傳統數據庫顯得力不從心。
另外,傳統數據庫還不能主動檢查和處理事件,缺乏對長事務和多重嵌套事務的響應和處理能力。
綜上所述,傳統數據庫已不能滿足復雜的實際應用需要,隨著面向對象研究的深入,把面向對象設計方法和數據庫技術結合形成新一代數據庫系統——面向對象數據庫系統,不僅是數據庫學科發展需要,也是推進計算機其他分支健康發展的必然結果。
(三)面向對象數據庫概念
面向對象數據庫系統(OODBS)支持定義和操作OODB,應滿足兩個標準:首先它是數據庫系統,其次它也是面向對象系統。第一個標準即作為數據庫系統應具備的能力(持久性、事務管理、并發控制、恢復、查詢、版本管理、完整性、安全性)。第二個標準就是要求面向對象數據庫充分支持完整的面向對象(OO)概念和控制機制。
綜上所述,我們將面向對象數據庫簡寫為:面向對象數據庫=面向對象系統+數據庫能力。
三、面向對象數據庫技術——對象關系數據庫
(一)系統模型
系統模型(如圖1所示),包括3個層次:業務邏輯層、OR代理層和物理存儲層。

1、業務邏輯層。業務邏輯層是程序開發人員或者用戶所接觸的接口層,在這個層次上是完全的面向對象內容。業務邏輯層由很多接口組成,例如應用程序接口是專門為特定的應用程序開發的面向對象接口;領域接口針對具體的應用領域,它與領域有關(或垂直定向),例如有些領域接口用于健康保健上的應用程序,它們僅適用于這個領域;其他一些接口適用于金融、制造業、通信等領域。業務邏輯層還可以包括其他類型的接口,例如多領域接口表明它們適用于多個領域。
2、OR代理層。OR代理層是系統的關鍵層和核心層。它是與領域無關的(或水平定向的)代理層,用于完成OO和RDB的相互映射和轉換。它由4個模塊組成:預處理/后續處理模塊;OSQL/SQL轉換器;OO/RDB映射轉換器;RDBMS是成熟的關系數據庫管理系統。
3、物理存儲層。系統的最底層是物理存儲層。在數據存儲的結構上,仍然采用關系數據庫的形式。可見,該系統模型是對傳統關系數據庫的擴展,是把面向對象技術與關系數據庫相結合而建立的一個對象關系數據庫管理系統(ORDBMS)。其具有以下優點:(1)與純粹的面向對象數據庫管理系統(OOD2BMS)相比,系統充分考慮結合了現有RDBMS的優點,并且在當前的數據庫理論和技術現狀下,具有更好的可實現性;(2)與當前普遍使用的兩層構架模型相比,該系統的邏輯更加清晰。同時,由于OR映射層對業務邏輯層提供了統一的面向對象接口,用戶和程序員編碼時可以將更多的精力放在具體領域的業務實現上而不是關系數據庫與類實例的轉換上。
(二)映射規則
OR映射是系統的關鍵功能,而OO/RDB映射轉換器是實現該功能的主要模塊。因此,根據面向對象理論和關系數據庫的特點,重點討論和制定映射規則。總體映射思路如表1所示:

1、沒有繼承關系的類映射規則:對于沒有繼承關系的一個類映射為一個表,其中表名取類名,對象標識符對應表的一個主鍵,表的對象屬性對應表列且以屬性名作為列名。另外,因為表中的列除了來自該對象的屬性外,可能會因為關聯、概括等關系而有所擴充,因此表列個數應大于或等于屬性個數。同樣原因,表的主碼可能包括除對象標識符對應主鍵以外的其他鍵。
2、類層次映射。對于存在繼承關系的3個類OA、OB和OC,不妨設OA是OB和OC的共同父類,則該類層次映射到數據表,可以根據具體情況的不同采用以下三個規則:(1)將整個類層次映射為單個數據表,表中包括所有類(基類、子類)的屬性。該規則的優點是實現簡單,且支持多態,而且因為表中包含了所有信息,報表操作簡單。缺點是增加了類層次中的耦合,類層次中任何類屬性的更改會導致表結構的更改,即會影響到整個層次結構而不僅僅是該類的子類;浪費了大量的數據庫存儲空間。(2)將處于繼承層次最底層的各個具體類分別映射到一個數據表,每一個表包含OID、具體類本身的屬性和它繼承的屬性,而抽象的基類則不參與映射。該規則的優點是報表操作實現簡單,表中包含了具體子類的所有信息.缺點是類的修改會導致其所有子類對應表的更改;角色的更改會造成ID的重新賦值(因為不同子類的ID可能重復);難以在支持多重角色時保持數據的完整性。(3)每個類均映射為一個數據庫表,表中包含特定于該類的屬性和OID,其父類的OID也作為外鍵存在與表中,作為指針指向該類從父類所繼承屬性的屬性值。該規則與面向對象概念的一致性及對多態的支持最好,易于修改基類和增加新的類。缺點是映射后的數據庫中存在大量的表,系統訪問對象屬性時要涉及多個表,需要較長的時間,對報表的支持較差。
3、類方法和類事件映射規則:方法和事件是其值不能靜態存儲在數據庫中而只能動態執行相關程序計算得到的一種特殊的屬性。在標準RDB模型中并沒有支持用戶自定義函數和過程的機制。可幸的是多年來一些商業化RDBMS產品已提供了這些功能,SQL標準也開始考慮包含這一功能,成為PSM子程序(包括了用戶自定義函數和過程),這樣就能夠建立方法和事件定義到PSM子程序定義的映射中。另外,方法調用的一個顯著特性就是多態,即動態捆綁。因此,僅把方法和事件調用映射為相應的PSM子程序調用是不夠的,需要在方法調用被映射后的目標代碼中包含PSM子程序以及該子程序調用的動態解決方案。一般的方法是將方法調用映射為case語句,在case語句中列出所有捆綁的條件和各種情況下相關PSM子程序的調用。類方法和事件的映射是與語言相關的程序翻譯問題,與具體的RDBMS相關,因此需要人工來完成。
4、類間關系映射。類間關系有很多種,例如繼承、組裝、聚合等等。規則2處理了繼承關系,對于其他的所有關系可以歸結為三種類型:一對一、一對多和多對多關系。類間關系映射為一個關系表,規則如下:如果兩個對象之間存在一對一關聯,則在兩個對象映射表中任選一個加入另一個對象映射表的主鍵作為自己的外鍵;如果兩個對象之間存在一對多關聯,則在“多”方對象映射表中加入“一”方對象映射表的主鍵作為外鍵;如果兩個對象之間存在多對多關聯,則產生對應該關聯的表,它由兩個對象對應表的所有主鍵組成,并以它們作為自己的主鍵。
四、結束語
對象關系數據庫系統模型為OR映射提供了明確的思路和有章可循的方法,能夠有效降低實際開發難度和工作量、規范映射模型、使業務邏輯部分和數據存儲部分達到了松耦合。
面向對象數據庫和關系數據庫之間的運算轉換,在多重數據庫互操作研究中是一個重要的環節。本文中,討論了對象關系數據庫的體系結構及其映射規則。這些工作對于對象關系數據庫的實際應用具有一定的現實意義。
參考文獻:
1、王意潔.面向對象的數據庫技術[M].北京:電子工業出版社,2003.
2、Ian Graham著,袁兆山譯.面向對象方法原理與實踐[M].北京:機械工業出版社,2003(3).
3、Scott.W.Ambler著,車皓陽、劉銳譯.面向對象軟件開發教程[M].北京:機械工業出版社,2003(3).
(作者單位:湖北工業大學計算機學院)