關係模型與ORM

關係數據庫模型在理論上主要解決的是消除數據冗餘的問題。關係模型的數學基礎是所謂的集合論,而集合的基本含義正是一組具有某種原子性的互不相同的元素。面向對象技術是對相關性進行局域化的一種手段(相關的數據和操作聚集到同一對象名義下),在這一局域化過程中,相同的元素被識別出來,成爲獨立的對象。從某種意義上說,關係模型與對象模型是殊途同歸的過程,是從不同側面對同一事物的反映。關係模型中,我們關注的重點是元素組成的集合,允許的連接關係定義在集合之上。而在對象模型中,我們關注的首先是橫向關聯的實體,實體之間具有穩定的聯繫。在概念層面上,從對象模型映射到一種關係存儲模型只是一個分組問題。爲了斷開實體之間的直接聯繫,關係模型創造了一個id字段,而對象模型並不是需要顯式id的。在關係模型中,關聯並不是通過某種存在的結構來表達的(一個實體持有另一個實體的指針,擁有直接聯繫),而是將直接關聯問題弱化爲某種計算過程,我們必須檢查id的值(不是某種直接的存在性),通過某種運算過程才能重新發現數據之間的關聯。

通過id(伴隨一個匹配計算過程)來進行間接關聯對於保證模型的一致性是非常關鍵的。在ORM中恢復了對象的強關聯其實會造成很多潛在的複雜性。例如爲了維護對象層面結構的一致性,在更新父子關係的時候,我們需要同時調用 child.setParent(parent); parent.getChildren().remove(child); 當關聯結構更加複雜的時候,這裏所需要的維護工作是隨之增加的。不過,在ORM中,對象的形態是暫時性的。在ORM的一次session的操作過程中,對於對象狀態的修改可以是不一致的。例如我們可以只調用child.setParent(parent); 而不需要同時 parent.getChilren().remove(child); 只要我們在此次session操作中,不需要同時用到parent.getChildren(). 這種關聯的暫時性對於很多ORM應用來說是必不可少的。

對象模型中可以直接表達的結構關係比關係模型要豐富一些,例如繼承關係,many-to-many, one-to-list等。但是所有這些都不是真正本質性的差異。拋棄概念詮釋,基類與衆多派生類之間的關係基本上可以等價於一組one-to-one關係。而當關聯對象本身的重要性凸現出來的時候,當我們無法把它約化爲對象上的一些附屬特性的時候(例如數組的下標),我們必然要建立相應的關聯對象,而這正對應於關係模型中的中間關聯表。中間關聯表上增加額外的字段是一個自然的擴展過程,而對象模型上做這樣的擴充往往表現爲形態上的重大的不兼容的變化,例如從getManyToManyEntity() -> getToManyRelation(), 這實際上意味着這裏的對象形式是偶然的,簡化的。

在原始的關係數據庫模型中,所有的表之間的地位是平等的,所有字段之間的地位是平等的(主鍵和外鍵在參與數據關聯時和其他字段的處理方式一致)。這種概念上的均一性和普遍性往往被認爲是理論的優美之處。但是現實世界是複雜的,發展的方向就是逐步識別出不同之處,並找出自然的表達形式將這些不同表達出來。均勻的關係模型是對稱性最高的,最簡化的模型。在面對物理約束時,它隱含的假設是集合之間很少發生相互作用,單表(表單到數據表之間的映射)和主從表是最廣泛的情況。試着想象一下關係模型,在思維中一般我們只能看到兩個數據表,當考慮到多個表的時候,因爲這些表之間沒有明確的可區分性,因此它們的意象是模糊的。只有明確意識到主鍵,外鍵,主表,從表,字典表,事實表,緯度表這些不同的概念的時候,當對稱性出現破缺的時候,我們思維中的模型才能夠豐富化起來。

關係模型理論應用到數據庫具體應用中時,並不需要死守關係範式教條,它們只是描述了某種極端化的對唯一性的追求。面對具體應用的時候,理論本身也在不斷豐富化。我並不把現實應用中必然需要增加冗餘字段看作是關係理論失效的結果。從關係完全分解,到關係完全不分解之間,我們可以建立大量的模型。建立冗餘字段的時候,我們存在着大量可能的選擇,到底哪一種選擇是最優的,理論方面仍然可以給我們以具體的指導。理論在各種不同純化程度的關係模型中都可以給我們以直觀的建議。數據倉庫理論中建立的snowflake模式和star模式,強調了針對主題域的允許部分冗餘的關係分解。這裏實際上是強調了表之間的不同性。不再是所有的表都處於同一地位。Fact Table和Dimension Table之間的區別被識別出來,並被明確處理。在我看來,這是原始關係模型的一種自然發展,它也是關係模型理論的一部分。理論不應該是單一的,而是提供一個模型級列,在不同的複雜性層次上,我們可以根據理論的指導選擇具體的實現模型。

關於ORM [url]http://canonical.iteye.com/blog/111500[/url]
關係模型中的所謂關係是在使用時刻才定義的,所有建立關係的方式在某種程度上都是等價的,也是外在的。而在ORM中主鍵與外鍵之間的關聯被獨立出來,成爲模型內置的部分。這在很多時候簡化了數據查詢的結構構造過程。
在ORM中主鍵因爲緩存的存在而顯出與其他字段的區別。ORM的使用使得數據存儲的分解策略得到擴充。並不是所有的表的更新頻度都是一致的,而且表中的數據量大小也不同。字典表一般較小,而且很少更新,可以安全的複製。在整個數據存儲框架中,ORM作爲獨立的技術元素參與數據存儲過程,通過主鍵提供緩存服務,產生了新的數據分佈模型,提供了新的性能優化契機。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章