對象關系映射

對象關系映射

用于轉換不同類型數據的技術
對象關系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序設計技術,用于實現面向對象編程語言裡不同類型系統的數據之間的轉換。從效果上說,它其實是創建了一個可在編程語言裡使用的“虛拟對象數據庫”。如今已有很多免費和付費的ORM産品,而有些程序員更傾向于創建自己的ORM工具[1]。
  • 中文名:對象關系映射
  • 外文名:Object Relational Mapping
  • 适用領域:程序開發
  • 所屬學科:
  • 别名: ORM

簡介

對象關系映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序設計技術,用于實現面向對象編程語言裡不同類型系統的數據之間的轉換。從效果上說,它其實是創建了一個可在編程語言裡使用的“虛拟對象數據庫”。如今已有很多免費和付費的ORM産品,而有些程序員更傾向于創建自己的ORM工具。

面向對象是從軟件工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關系數據庫則是從數學理論發展而來的,兩套理論存在顯著的區别。為了解決這個不匹配的現象,對象關系映射技術應運而生。

簡單的說:ORM相當于中繼數據。具體到産品上,例如下邊的ADO.NET Entity Framework。DLINQ中實體類的屬性[Table]就算是一種中繼數據。

對象關系映射成功運用在不同的面向對象持久層産品中,如:Torque,OJB,Hibernate,TopLink,Castor JDO,TJDO,Active Record,NHibernate,ADO.NET Entity Framework等。

對象數據庫

對象數據庫是一種以對象形式表示信息的數據庫。對象數據庫的數據庫管理系統被稱為ODBMS或OODBMS。

兩個主要原因讓用戶使用對象數據庫技術。首先,關系數據庫在管理複雜數據時顯得笨重。其次,被應用軟件操作的數據一般是用面向對象的編程語言如C++,Java,Delphi和C#寫成,而那些用來轉化數據表示和關系數據庫元組的代碼很冗繁,執行時也有不少耗時。這種應用程序和數據庫表示信息的模式之間的不匹配有時也被稱為impedance mismatch。 

曆史

對象數據庫管理系統,發端于1970年代早中期為支持對圖結構對象的原生數據庫管理而開展的研究。“面向對象數據庫系統”這一術語第一次出現于1985年。著名的研究項目包括Encore-Ob/Server(布朗大學),EXODUS(Wisconsin大學),IRIS(惠普),ODE(Bell實驗室),ORION(MCC), Vodak(GMD-IPSI)和Zeitgeist(Texas Instruments)。其中以ORION項目發表的論文數為最多。MCC的Won Kim将這些論文中最有價值的一部分彙編成書并由MIT出版社出版。

對象數據庫管理系統為面向對象編程語言增加了持久的概念。早期的商品數據庫集成了多種語言:GemStone(Smalltalk)、Gbase(Lisp)和Vbase(COP)。COP即“ C Object Processor”(C對象處理器),是一種基于C的專有語言,比C++早。1990年代大部分時間裡,C++統治着商用對象數據庫管理系統市場。廠商在1990年代晚期加入了Java并于最近加入了C#。 

對象數據庫的采納

基于持久編程的對象數據庫在一些應用領域獲得了認可,如工程和空間數據庫,通信和科學領域如高能物理和分子生物。他們對主流的商業數據處理沒有什麼影響,盡管獲得了一些應用在部分特殊領域如金融服務。值得指出的是:對象數據庫保持着“世界上最大的數據庫(超過1000Terabytes在斯坦福線性加速中心)和最高攝取率(一Terabyte每小時)”的記錄。

2004年以來,當出現了易用和普遍可支付的開放源代碼對象數據庫時,對象數據庫進入了第二次增長期。這些開放源代碼的對象數據庫完全用OOP語言如Java,C++,或C#寫出。ObjectDB是對象關系數據庫的一個例子。 

技術特性

在純對象式數據庫中,資料以對象的形式存儲,這些對象隻能由其所屬的類中定義的方法來操作。對象被組成一種類型層次(有時是格式lattic),子類繼承其超類的特性。對象中可以有到其他對象的引用,于是應用程序可以以一種導航式的編程風格訪問數據。

多數對象式數據庫也提供了一些查詢語言,允許用聲明式編程訪問對象。在對象查詢語言以及查詢和導航接口的集成領域,産品間出現了很大的區别。ODMG用對象查詢語言OQL作了标準化的嘗試。

訪問數據可以更快,表的聯合常常是不必要的(在關系數據庫的表實現方式下)。這是因為無需查詢隻需通過指針(Pointer)就可以直接獲得對象。

産品間的另一點不同是數據庫定義模式的方式。然而一般的特征是編程語言和數據庫模式使用相同類型的定義。

多媒體應用程序将變得容易因為與數據相關的類方法保證了數據的正确解釋。

許多對象數據庫提供對版本的支持。一個對象可以看作是他所有版本的集合。同時,對象版本也可以被看作是對象自身的屬性。一些對象數據庫也提供了對觸發器和約束的語義支持,這些特性是活躍數據庫(active database)的基礎。 

優勢和劣勢

對ODBMS和關系DBMS的基準測試顯示ODBMS在某些任務上優勢明顯。主要原因是許多操作使用導航式而不是聲明式接口,并且對數據的導航式訪問通常可以有指針高效的實現。

對基于導航數據庫技術,如ODBMS的批評指出,基于指針的技術為一些特殊的搜索路徑或視點(viewpoint)作了優化。而且,對一般目的的查詢,基于指針的技術比關系型要慢并難于形式化。導航式顯得适合于特定應用而失了普遍,未來的使用。

ODBMS的其他技術,顯得缺失了與SQL世界中大量工具或特性的互操作性,包括但不限于産業标準互聯性,報告工具,OLAP工具以及備份和恢複标準。另外,不像關系數據庫,對象數據庫缺少形式化的數學基礎,而這反過來導緻他們在查詢支持上的弱勢。不過,這一缺陷被部分彌補,因為一些ODBMS除了導航式訪問外也提供了對SQL的完全支持,如Objectivity/SQL++。

事實上,在概念封裝,即隐藏數據,使他隻能通過公布的一些接口訪問和關系數據庫技術假定:數據隻能由基于數據内容的查詢,而不是預定義的查詢路徑的形式訪問之間,存在着本質的張力。

數據庫中心論,傾向于用聲明和屬性驅動的觀點看世界,而面向對象傾向于從行為的觀點看世界。這就是圍繞着OOP和數據庫的許多impedance mismatch問題之一。

盡管很多評論認為對象數據庫是失敗的,但主要的辯護者仍很活躍,更緊密地整合數據庫的功能和對象編程語言的嘗試在研究和産業社區裡仍在繼續。

上一篇:割肉紋身

下一篇:網絡推廣

相關詞條

相關搜索

其它詞條