面向對象技術和數據庫
摘要
本文簡要回顧了面向對象技術和數據庫技術結合的發展歷程和方向,探討面向對象技術和數據庫技術的結合的三種方式的基本特征、優勢、劣勢,著重介紹面向對象數據庫和以應用面向對象技術的后關系型數據庫——
Caché
,以其為例分析面向對象技術和數據庫技術結合的現狀,并展望面向對象技術和數據庫技術結合發展前景。
關鍵詞
面向對象、
SQL
、
MUPUS
語言、
Caché
、
ORM
(對象關系映射)
前言
在當今軟件的世界里,面向對象技術一統天下,滲透到幾乎所有軟件設計領域、應用領域和工程領域。與此同時,在數據庫領域中,雖然關系數據庫占據了絕大部分的市場份額,
Oracle
、
DB2
、
SQLServer
、
Infomix
成為數據庫中的霸主,但關系數據庫究竟還是是數據的一種存儲方式,它不屬于面向對象領域。當以關系數據庫為數據存儲方式時,由于關系概念與面向對象概念是完全不同的兩個概念,它們之間存在嚴重的“阻抗失諧(
Impedance Mismatch
)”。為了解決這個問題,面向對象技術和數據庫技術自然而然開始交流和結合,應用上層的面向對象要求滲透到數據庫,甚至是數據庫底層,并開始影響未來數據庫的發展。
面向對象技術和數據庫技術的結合,開拓出多種結合方式,出現了許多新興的概念,創造出來許多優秀的產品,下面就讓我們一起來疏理其脈絡,管窺其機理,展望其發展。
發展
八十年代以來
,
不同領域的應用提出了許多新的數據管理需求
,
傳統數據庫技術遇到了巨大的挑戰。在這種挑戰之下,第三代數據庫應運而生,并和諸多新技術相結合(比如分布處理技術、并行計算技術、人工智能技術、多媒體技術、模糊技術),廣泛應用于多個領域(商業管理、
GIS
、計劃統計等),由此也衍生出多種新的數據庫技術。其中一個重要的方向就是數據庫的面向對象技術,在面向對象技術和數據庫技術相結合的過程中,基本上是沿著下面幾種途徑發展的:
一種是建立純粹的面向對象數據庫管理系統(即
OODBMS
)
,這種途徑往往是以一種面向對象語言為基礎,增加數據庫的功能,主要是支持持久對象和實現數據共享。面向對象的數據庫不僅在處理多媒體等數據類型時可以做到游刃有余,而且在應用系統開發速度和維護等方面有著極大的優越性。面向對象數據庫系統產生于
80
年代后期,它利用類的設施來描述復雜對象,利用類中封裝的方法來模擬對象的復雜行為,利用繼承性來實現對象的結構和方法的重用。面向對象數據庫系統對一些特定應用領域(例如
CAD
等),能較好地滿足了其應用需求。但是,這種純粹的面向對象數據庫系統并不支持
SQL
語言,在通用性方面失去了優勢,因而其應用領域受到了很大的局限。
另一種途徑是從傳統的關系數據庫加以擴展,增加面向對象的特性,把面向對象技術與關系數據庫相結合,建立對象關系數據庫管理系統(
ORDBMS
)
,這種系統既支持已經被廣泛使用的
SQL
,具有良好的通用性,又具有面向對象特性,支持復雜對象和復雜對象的復雜行為,是對象技術和傳統關系數據庫技術的最佳融合。
1997
年,對象關系數據庫的出現和發展應該算是數據庫技術的一次革命,對象技術和關系技術珠聯壁的優點,吸引著全球數據庫廠商競相研究開發。如何在現有的關系型數據庫產品中加入對象技術,即開發面向對象的關系型數據庫成為數據庫軟件廠商競爭的一個焦點。
第三種就是最近兩年中,在開源領域中最為炙熱的
ORM
(對象關系映射)。
解決“阻抗失諧(
Impedance Mismatch
)”矛盾的辦法是在對象層和關系層間建立一個映射層(
Mapping Layer
),通過這種方式數據源中的關系數據才能進入對象領域,以對象的面貌出現,供上層應用使用。
最后一種來自于
MUMPS
領域——
M
技術數據庫。
MUMPS
語言,簡稱:
M
技術算起來也是一種古老的語言了,與
FORTRAN
和
COBOL
屬于同時代的語言。
它在醫學、商業和教育領域中的用處正在日益擴大。
M
技術應用于數據庫領域產生一個數據庫分支——
M
數據庫,其中的佼佼者——
Caché
是將
M
技術和面向對象技術融合得到的后關系型數據庫,在醫療領域的絕對占有率。在面向對象技術和數據庫技術結合的大環境下,這種技術可以說是劍走偏鋒,又銳利難當。
面向對象數據庫
面向對象和關系數據庫一樣,都支持數據庫的持久性、二次存儲管理、并發控制、恢復和查詢的功能。不同的是:
1.???????
面向對象的范例是以分類為基礎的,類用于定義存儲在數據庫內對象的結構及行為
2.?
關系范例是以元組(
tuple
)或記錄為基礎的,它被唯一地用來定義存儲在數據庫內的數據結構。一組元組被稱之為一個關系(
relation
)或一個表(
table
)
面向對象數據庫系統的優點
1.???????
能有效地表達客觀世界和有效地查詢信息:面向對象的方法符合一般人的思維規律、即將現實世界分解成明確的對象,這些對象具有屬性和行為。
2.???????
可維護性好:在耦合性和內聚性方面,面向對象數據庫的性能尤為突出。這使得數據庫設計者可在盡可能少影響現存代碼和數據的條件下修改數據庫結構。這種先進的耦合性和內聚性也簡化了在異種硬件平臺的網絡上的分布式數據庫的運行。
3.???????
能很好地解決
Impedance mismatch
問題
面向對象數據庫系統的缺點
1.???????
技術還不成熟。面向對象數據庫技術的根本缺點是這項技術還不成熟,還不廣為人知。
ODBMS
如今還存在著標準化問題,由于缺乏標準化,許多不同的
ODBMS
之間不能通用。此外,是否修改
SQL
以適應面向對象的程序,還是用新的對象查詢語言來代替它,目前還沒有解決,這些因素表明隨著標準化的出現,
ODBMS
還會變化。
2.???????
面向對象技術需要一定的訓練時間:人們還需要學習一套新的開發方法使之與現有技術相結合。此外,面向對象系統開發的有關原理才剛開始具有雛形,還需一段時間在可靠性、成本等方面令人可接受。
3.???????
理論還需完善:從正規的計算機科學方面看,還需要設計出堅實的演算或理論方法來支持
ODBMS
的產品。此外,既不存在一套數據庫設計方法學,也沒有關于面向對象分析的一套清晰的概念模型,怎樣設計獨立于物理存儲的信息還不明確。
對象關系數據庫和對象關系映射
對象關系數據庫和對象關系映射作的是同一件事:在關系數據庫之上,加入對象——關系映射引擎,將應用領域中的實體對象和數據中的表作一個映射,上層應用操作對象,映射引擎作具體的關系表的操作。所不同的是角色不同:對象關系數據庫是由數據庫廠商實現,是一個自底向上的行為,而對象關系映射由應用層來作,是一個自上而下的行為,殊途同歸。核心技術便是
OR
映射,包括:
1.?????
將屬性映射成列。類屬性將映射成關系數據庫中的零或幾列。要記住,并不是所有屬性都是持久的。
2.???????
在關系數據庫中實現繼承。在將對象保存到關系數據庫中時,繼承的概念中發生幾個有趣的問題。
3.???????
將類映射成表。類到表的映射通常不是直接的。除了非常簡單的數據庫以外,您不會有類到表的一對一映射。
其優點包括:
1.???????
該技術最大的有點在于讓數據庫的關系技術得到“可持續發展”。當今業界,關系數據庫占據著絕大部分的應用領域,縱然從純技術角度來看,關系技術與其他先進的數據庫技術相比存在諸多限制,但從市場、應用、發展和經濟多角度來看,只有在關系數據庫之上作出調適,進行改進,才能保護客戶的既有投資,才能讓熟悉關系技術的開發群體能夠平滑過渡到新的階段。因此可以說,對象關系映射技術才是最可能得到長足發展和廣泛應用的技術
2.???????
能夠在很大的程度上解決
Impedance mismatch
問題,現今對象關系技術已經支持,對象關系的一對一映射,一對多映射,部分產品還實現了多對多映射,較好的實現了主鍵、外鍵和事務。并且,在過程語言上的發展使得關系世界的存儲過程和觸發器的功能得到實現
3.???????
對象關系映射技術較好的實現同現有主流開發語言的結合,如
Java
、
C
#語言,無縫的融入到開發環境中,這樣的便捷性大大提高的開發的效率,減少了應用程序的代碼量。
當然,雖然對象關系數據庫和對象關系映射殊途同歸,但是對象關系數據庫有數據庫廠商開發和維護,算是正規軍,對象關系映射中間件主要由開源組織和個人開發和維護,算是游擊隊,兩相比較,正規軍將對象關系層直接融入數據庫產品,在技術上具備效率、和數據庫的結合度等多方優勢;在實力層面又具備強大的經濟、市場和研發優勢,因此會成為對象關系映射技術發展的主流。而對象關系映射中間件短小精悍,具備多數據庫的支持能力,并且受開發社群的鼎立支持,也將在未來占據一席之地。
后關系型數據庫-
Caché
作為唯一實用過的面向對象數據庫,我試圖給它作一個分類,關系對象數據庫?還是對象數據庫?很難將其歸類,因此單列給予分析說明。可以
Caché
是一種高性能的面向對象數據庫,具有高效率和可升級的多維對象模型,由于市場的需要其內部集成了
SQL
訪問,并且具有獨特的分布式數據緩沖功能。其底層是多維數據模型,其前身是
Mupus
語言的數據庫產品。它有下列特點:
1.????????
全面采用了面向對象模型,
Caché
存儲的數據模型接近現實世界。對象世界的一切特點它都具備,并且實現得很。
Caché
的對象模型是基于
ODMG
標準的,
Caché
全
面
支持所有面向對象概念,包括封裝、嵌入對象、多繼承、多形性和集合。
2.????????
Caché’s
高性能數據庫使用多維數據模型,它允許有效地緊密存儲豐富的數據結構。在這個多維數據模型之上,構建對象和關系表,可以說:對象和關系表是其多維數據的外部表現,就想同樣一個人,在外面穿著警服是警察,在家穿著便服是父親和丈夫。
Caché
通過統一數據結構,提供用對象和關系表兩種方式的靈活而迅速的數據訪問,可以用兩種方式并行訪問相同的數據。
3.???????
Caché
可以與多種開發工具和語言互操作,這些訪問方法允許同時使用來滿足不同應用需求和優化性能。對于對象,可以通過
ActiveX
、
Java
、
C++
和
Web
方式訪問,同時產品統一數據結構可以同時支持用標準
SQL
方式訪問對象庫。
4.????????
全面支持
SQL
的訪問方式,
Caché
也提供了對微軟
ODBC
和
SUN
的
JDBC
的高性能驅動程序,在應用端可以象訪問關系數據庫一樣訪問
Caché
。
5.????????
Caché
應用服務器提供
CSP
技術。用
Caché
開發的應用可以與
Web
進行數據交互,
CSP
提供了:
·???????
一個為數據庫應用提供的先進的面向對象開發方法。
·???????
極好的運行性能和可擴展性
·???????
CSP
支持
HTML
、
XML
、
WML
和其它基于
Web
的語言。
講得太多,有為
Caché
作廣告的嫌疑,但根據實際的應用,我認為它是一個真正集關系數據庫和對象數據庫之所長的產品,通過它,開發者可以自由的游弋于對象世界和關系世界,不同的應用邏輯采用不同的技術對相同的數據進行訪問。因此,可以預言,在將來的支持面向對象的數據庫世界中,
Caché
將扮演頗為重要的角色。
結論
“阻抗失諧(
Impedance Mismatch
)” 的問題引發了當今數據發展的一大趨勢——面向對象技術和數據庫技術的結合和相互促進。對象是對復雜事物進行抽象思維結果,也是認識事物的普遍方法。對象編程和對象數據庫符合人們對于客觀世界的認識,事物的復雜行為在程序實現對象時也可以隱藏其復雜性。這些特性在現代的面向對象應用中越來越多地體現。因此,不管選擇怎樣的道路來實現,未來的幾年或者十幾年中,伴隨著面向對象技術的發展,面向對象技術和數據庫技術的結合將會穩步向前,逐漸向產業化和主流化方面發展。
參考文獻
《數據庫技術的新浪潮》,微電腦世界
《
Cach
é技術白皮書》
Intersystem Inc.
《面向對象的關系數據庫設計》,互聯網
《
Object-oriented database product vendors
》
www.soa.org
《對象數據庫的實現技術及其查詢處理》
復旦大學博士論文