--ORM--
對象關係映射(Object Relational Mapping,簡稱ORM)是一種為瞭解決物件導向與關聯式資料庫存在的互不匹配的現象的技術。 簡單的說,ORM是通過使用描述對象和資料庫之間映射的中繼資料,將java程式中的對象自動持久化到關聯式資料庫中。本質上就是將資料從一種形式轉換到另外一種形式。 這也同時暗示者額外的執行開銷;然而,如果ORM作為一種中介軟體實現,則會有很多機會做最佳化,而這些在手寫的持久層並不存在。 更重要的是用於控制轉換的中繼資料需要提供和管理;但是同樣,這些花費要比維護手寫的方案要少;而且就算是遵守ODMG規範的對象資料庫依然需要類層級的中繼資料。
對象-關係映射(Object/Relation Mapping,簡稱ORM),是隨著物件導向的軟體開發方法發展而產生的。物件導向的開發方法是當今企業級應用開發環境中的主流開發方法,關聯式資料庫是企業級應用環境中永久存放資料的主流資料存放區系統。對象和關係資料是業務實體的兩種表現形式,業務實體在記憶體中表現為對象,在資料庫中表現為關係資料。記憶體中的對象之間存在關聯和繼承關係,而在資料庫中,關係資料無法直接表達多對多關聯和繼承關係。因此,對象-關係映射(ORM)系統一般以中介軟體的形式存在,主要實現程式對象到關聯式資料庫資料的映射。
物件導向是從軟體工程基本原則(如耦合、彙總、封裝)的基礎上發展起來的,而關聯式資料庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為瞭解決這個不匹配的現象,對象關係映射技術應運而生。
讓我們從O/R開始。字母O起源於"對象"(Object),而R則來自於"關係"(Relational)。幾乎所有的程式裡面,都存在對象和關聯式資料庫。在商務邏輯層和使用者介面層中,我們是物件導向的。當對象資訊發生變化的時候,我們需要把對象的資訊儲存在關聯式資料庫中。
當你開發一個應用程式的時候(不使用O/R Mapping),你可能會寫不少資料訪問層的代碼,用來從資料庫儲存,刪除,讀取對象資訊,等等。你在DAL中寫了很多的方法來讀取對象資料,改變狀態物件等等任務。而這些代碼寫起來總是重複的
對象角色建模(ORM)提供了概念性的、易於理解的模型化資料的方法。ORM方法論基於三個核心原則:
· 簡單。以最基本的形式建模資料。
· 傳達性。資料庫結構被任何人都能理解的語言文檔化。
· 精確性。基於資料模型建立正確標準化了的結構。
典型地,建模者通過收集來自那些熟悉應用程式但不熟練的資料建模者的人的資訊開發資訊模型。建模者必須能夠用非技術企業專家可以理解的術語在概念層次上與資料結構進行通訊。建模者也必須能以簡單的單元分析資訊,對樣本資料進行處理。ORM專門被設計為改進這種聯絡。
規則運算式
ORM把應用程式世界表示為具有角色(關係中的部分)的一組對象(實體或值)。ORM有時也稱為基於事實的建模,因為它把相關資料描述為基本事實。這些事實如果分割為再小的事實就會丟失資訊。
簡單事實的一些例子包括:
· 人有電話
· 人住在某個地方
· 人生於某個日期
· 人在某個日期被僱傭
這些事實相應的ORM模型如下:
圖 1. 對象角色模型
圖中的圓代表對象;矩形代表論斷。在ORM中,象在邏輯中一樣,一個論斷只是帶有對象洞的語句。箭頭和點代表系統中的約束。
例如,在"人有電話"這個事實的診斷上的箭頭可以翻譯為:
有可能某個人有多於一個電話,並且至少有一個人有電話。
在"人生於某個日期"這個事實中,在論斷上的箭頭與連線物件與論斷的點的結合表明:
每個人確切地出生於一個日期。
與 ER的比較
實體關聯(ER)是另一種類型的資料庫建模。ORM模型的簡單性與ER相應部分的比較:
圖 2. 實體關聯
ORM以簡單對象和論斷的形式描述企業事實,而實體關聯方法論以術語實體(擁有屬性並參與關係)描述世界。在圖1的ORM例子中,人,電話,地址和日期都表示為扮演有相互聯絡的角色的對象。在ER例子中,人是一個實體,它由屬性:地址和電話進行描述。
例如,如果要把地址分解為街道,城市,州,ZIP碼,那麼必須把地址改變為具有相應屬性的實體類型,結果會改變人與地址間的關係。儘管在上面的ORM模型中表示的約束也可以在ER中表示,但只要向模型中增加節點,或編寫應用程式代碼對模型進行補充,就可以表示其它約束。
ORM的優點
ORM提供的不只是描述不同對象間關係的一個簡單而直接的方式。從樣本中,可以看出ORM還提供了靈活性。使用ORM建立的模型比使用其它方法建立的模型更有能力適應系統的變化。另外,ORM允許非技術企業專家按樣本資料談論模型,因此他們可以使用真實世界的資料驗證模型。因為ORM允許重用對象,資料模型能自動對應到正確標準化的資料庫結構。
ORM模型的簡單性簡化了資料庫查詢過程。使用ORM查詢工具,使用者可以訪問期望資料,而不必理解資料庫的底層結構。
資料庫產生和遍曆引摯
象所有優秀的模型方法一樣,ORM也不只是一個概念。它包含了不同的設計過程以協助建模者映射概念的和邏輯的模型,或使用轉換引摯在這些模型間轉換。
ORM模型也能夠自動地映射到大多數流行的關係型資料庫所實現的資料庫結構。檢查前面的例子,ORM模型能自動產生ER圖表或邏輯模型(可以翻譯為SQL 代碼,並適用於所選擇的資料庫)。
總結
利用非技術企業專家的知識對於確保應用程式滿足企業需求是重要的。ORM,Visual Studio .NET的一個特性,是一個最初的、便於使用的概念性資料模型方法。通過使用不只是只有資料庫專家才能理解的語言,ORM使那些充分理解了企業對應用程式需求的人能直接參与設計。
ORM還支援完全的遍曆引摯,因此一旦定義了企業需求,它們就能迅速的轉化為邏輯和物理資料庫圖表。使用ORM,組織可以提高應用程式開發的效率,確保企業需求能被正確交付。