物件關聯對映(,簡稱ORM,或O/RM,或O/R mapping tool)是计算机科学中的一种程式設計技術,用於在關聯式資料庫和物件導向編程語言的內存(通常是堆)之間轉換數據。這實際上創建了一個可在編程語言中使用的「虛擬物件資料庫」。
在物件導向程式設計中,數據管理任務操作於將標量值組合為物件的物件。例如,一個包含個人信息及多個電話號碼和地址的地址簿條目。在物件導向實現中可建模為「Person物件」,其包含條目所組成的每個數據項的屬性/字段:人名、電話號碼列表和地址列表。電話號碼列表本身包含「PhoneNumber物件」等。每個地址簿條目被編程語言視為單個物件(例如可通過包含指向該物件指針的單個變量引用)。各種方法可與物件關聯,例如返回首選電話號碼、家庭地址等方法。
相比之下,如SQL等關聯式資料庫將標量分組為元組,再列舉於表中。元組與物件有相似性(都將值收集到命名字段使整個集合可作為單個複合實體操作),但存在諸多差異:生命週期管理(行插入/刪除 vs 垃圾回收/引用计数)、引用其他實體(物件引用 vs 外鍵引用)、繼承(關係數據庫中不存在)。物件在堆上管理且由單個進程完全控制,而數據庫元組共享且需包含鎖定、合併和重試。物件關聯對映提供自動支持將元組映射到物件並返回,同時解決所有這些差異。
問題核心在於將物件的邏輯表示轉換為可存儲於數據庫中的原子化形式,同時保留物件及其關係的屬性,以便需要時可重新加載為物件。若實現此存儲檢索功能,則稱物件為持久的。
ORM工具的缺點通常源於高層次抽象遮蔽了實現代碼中的實際操作。
物件導向數據庫
另一方法是使用物件導向數據庫管理系統(OODBMS)或文件導向數據庫(如原生XML數據庫)以提供更靈活的數據建模。OODBMS是專為處理物件導向值設計的數據庫。使用OODBMS無需將數據轉換為SQL形式,因數據以其原始物件形式存儲且關係直接表示,無需聯接表/操作。文件導向數據庫的ORM等效物稱為物件文件映射器(ODM)。
文件導向數據庫還防止用戶將物件"分解"為表行。許多此類系統也支持XQuery查詢語言檢索數據集。
物件導向數據庫傾向用於複雜的利基應用。反對使用OODBMS的論點之一是其可能無法執行臨時的、與應用無關的查詢。因此許多程序員更習慣物件-SQL映射系統,儘管多數物件導向數據庫能有限處理SQL查詢。其他OODBMS提供到SQL數據庫的複製,以滿足臨時查詢需求同時保留已知查詢模式。
挑戰
將物件系統匹配到關係數據庫時會出現多種難題,稱為物件關聯阻抗不匹配。
實現ORM的替代方案是使用每個主要數據庫自帶的原生過程語言。可通過SQL語句從客戶端調用。數據訪問物件(DAO)設計模式用於抽象這些語句,並為應用其餘部分提供輕量級物件導向介面。
ORM限於其預定義功能,可能無法涵蓋所有邊緣案例或數據庫特性。通常通過提供編寫原始查詢的介面來緩解此限制,如Django ORM。
參見
*对象关系映射软件列表
*对象关系映射软件比较
*AutoFetch - 自動查詢優化
*CORBA
*对象数据库
*对象持久化
*对象关系数据库
*对象关系阻抗不匹配
*关系模型
**SQL
*Java 数据对象
*Jakarta Persistence
*服务数据对象
*Entity Framework
*主动记录
*数据映射器模式
*单表继承
参考文献
外部連結
- [http://www.artima.com/intv/abstract3.html 關於ORM] by Anders Hejlsberg
- [http://www.agiledata.org/essays/mappingObjects.html 將物件映射到關係數據庫:O/R映射詳述] by Scott W. Ambler
评论 (0)