posts - 176, comments - 240, trackbacks - 0, articles - 7

          關(guān)系模型與ORM

          Posted on 2008-01-06 19:04 canonical 閱讀(3168) 評(píng)論(3)  編輯  收藏 所屬分類: 設(shè)計(jì)理論
              關(guān)系數(shù)據(jù)庫(kù)模型在理論上主要解決的是消除數(shù)據(jù)冗余的問題。關(guān)系模型的數(shù)學(xué)基礎(chǔ)是所謂的集合論,而集合的基本含義正是一組具有某種原子性的互不相同的元素。面向?qū)ο蠹夹g(shù)是對(duì)相關(guān)性進(jìn)行局域化的一種手段(相關(guān)的數(shù)據(jù)和操作聚集到同一對(duì)象名義下),在這一局域化過程中,相同的元素被識(shí)別出來,成為獨(dú)立的對(duì)象。從某種意義上說,關(guān)系模型與對(duì)象模型是殊途同歸的過程,是從不同側(cè)面對(duì)同一事物的反映。關(guān)系模型中,我們關(guān)注的重點(diǎn)是元素組成的集合,允許的連接關(guān)系定義在集合之上。而在對(duì)象模型中,我們關(guān)注的首先是橫向關(guān)聯(lián)的實(shí)體,實(shí)體之間具有穩(wěn)定的聯(lián)系。在概念層面上,從對(duì)象模型映射到一種關(guān)系存儲(chǔ)模型只是一個(gè)分組問題。為了斷開實(shí)體之間的直接聯(lián)系,關(guān)系模型創(chuàng)造了一個(gè)id字段,而對(duì)象模型并不是需要顯式id的。在關(guān)系模型中,關(guān)聯(lián)并不是通過某種存在的結(jié)構(gòu)來表達(dá)的(一個(gè)實(shí)體持有另一個(gè)實(shí)體的指針,擁有直接聯(lián)系),而是將直接關(guān)聯(lián)問題弱化為某種計(jì)算過程,我們必須檢查id的值(不是某種直接的存在性),通過某種運(yùn)算過程才能重新發(fā)現(xiàn)數(shù)據(jù)之間的關(guān)聯(lián)。
             
              通過id(伴隨一個(gè)匹配計(jì)算過程)來進(jìn)行間接關(guān)聯(lián)對(duì)于保證模型的一致性是非常關(guān)鍵的。在ORM中恢復(fù)了對(duì)象的強(qiáng)關(guān)聯(lián)其實(shí)會(huì)造成很多潛在的復(fù)雜性。例如為了維護(hù)對(duì)象層面結(jié)構(gòu)的一致性,在更新父子關(guān)系的時(shí)候,我們需要同時(shí)調(diào)用 child.setParent(parent); parent.getChildren().remove(child); 當(dāng)關(guān)聯(lián)結(jié)構(gòu)更加復(fù)雜的時(shí)候,這里所需要的維護(hù)工作是隨之增加的。不過,在ORM中,對(duì)象的形態(tài)是暫時(shí)性的。在ORM的一次session的操作過程中,對(duì)于對(duì)象狀態(tài)的修改可以是不一致的。例如我們可以只調(diào)用child.setParent(parent); 而不需要同時(shí)  parent.getChilren().remove(child); 只要我們?cè)诖舜蝧ession操作中,不需要同時(shí)用到parent.getChildren(). 這種關(guān)聯(lián)的暫時(shí)性對(duì)于很多ORM應(yīng)用來說是必不可少的。
             
              對(duì)象模型中可以直接表達(dá)的結(jié)構(gòu)關(guān)系比關(guān)系模型要豐富一些,例如繼承關(guān)系,many-to-many, one-to-list等。但是所有這些都不是真正本質(zhì)性的差異。拋棄概念詮釋,基類與眾多派生類之間的關(guān)系基本上可以等價(jià)于一組one-to-one關(guān)系。而當(dāng)關(guān)聯(lián)對(duì)象本身的重要性凸現(xiàn)出來的時(shí)候,當(dāng)我們無法把它約化為對(duì)象上的一些附屬特性的時(shí)候(例如數(shù)組的下標(biāo)),我們必然要建立相應(yīng)的關(guān)聯(lián)對(duì)象,而這正對(duì)應(yīng)于關(guān)系模型中的中間關(guān)聯(lián)表。中間關(guān)聯(lián)表上增加額外的字段是一個(gè)自然的擴(kuò)展過程,而對(duì)象模型上做這樣的擴(kuò)充往往表現(xiàn)為形態(tài)上的重大的不兼容的變化,例如從getManyToManyEntity() -> getToManyRelation(), 這實(shí)際上意味著這里的對(duì)象形式是偶然的,簡(jiǎn)化的。
             
              在原始的關(guān)系數(shù)據(jù)庫(kù)模型中,所有的表之間的地位是平等的,所有字段之間的地位是平等的(主鍵和外鍵在參與數(shù)據(jù)關(guān)聯(lián)時(shí)和其他字段的處理方式一致)。這種概念上的均一性和普遍性往往被認(rèn)為是理論的優(yōu)美之處。但是現(xiàn)實(shí)世界是復(fù)雜的,發(fā)展的方向就是逐步識(shí)別出不同之處,并找出自然的表達(dá)形式將這些不同表達(dá)出來。均勻的關(guān)系模型是對(duì)稱性最高的,最簡(jiǎn)化的模型。在面對(duì)物理約束時(shí),它隱含的假設(shè)是集合之間很少發(fā)生相互作用,單表(表單到數(shù)據(jù)表之間的映射)和主從表是最廣泛的情況。試著想象一下關(guān)系模型,在思維中一般我們只能看到兩個(gè)數(shù)據(jù)表,當(dāng)考慮到多個(gè)表的時(shí)候,因?yàn)檫@些表之間沒有明確的可區(qū)分性,因此它們的意象是模糊的。只有明確意識(shí)到主鍵,外鍵,主表,從表,字典表,事實(shí)表,緯度表這些不同的概念的時(shí)候,當(dāng)對(duì)稱性出現(xiàn)破缺的時(shí)候,我們思維中的模型才能夠豐富化起來。
             
              關(guān)系模型理論應(yīng)用到數(shù)據(jù)庫(kù)具體應(yīng)用中時(shí),并不需要死守關(guān)系范式教條,它們只是描述了某種極端化的對(duì)唯一性的追求。面對(duì)具體應(yīng)用的時(shí)候,理論本身也在不斷豐富化。我并不把現(xiàn)實(shí)應(yīng)用中必然需要增加冗余字段看作是關(guān)系理論失效的結(jié)果。從關(guān)系完全分解,到關(guān)系完全不分解之間,我們可以建立大量的模型。建立冗余字段的時(shí)候,我們存在著大量可能的選擇,到底哪一種選擇是最優(yōu)的,理論方面仍然可以給我們以具體的指導(dǎo)。理論在各種不同純化程度的關(guān)系模型中都可以給我們以直觀的建議。數(shù)據(jù)倉(cāng)庫(kù)理論中建立的snowflake模式和star模式,強(qiáng)調(diào)了針對(duì)主題域的允許部分冗余的關(guān)系分解。這里實(shí)際上是強(qiáng)調(diào)了表之間的不同性。不再是所有的表都處于同一地位。Fact Table和Dimension Table之間的區(qū)別被識(shí)別出來,并被明確處理。在我看來,這是原始關(guān)系模型的一種自然發(fā)展,它也是關(guān)系模型理論的一部分。理論不應(yīng)該是單一的,而是提供一個(gè)模型級(jí)列,在不同的復(fù)雜性層次上,我們可以根據(jù)理論的指導(dǎo)選擇具體的實(shí)現(xiàn)模型。
             
              關(guān)于ORM http://canonical.javaeye.com/blog/111500
              關(guān)系模型中的所謂關(guān)系是在使用時(shí)刻才定義的,所有建立關(guān)系的方式在某種程度上都是等價(jià)的,也是外在的。而在ORM中主鍵與外鍵之間的關(guān)聯(lián)被獨(dú)立出來,成為模型內(nèi)置的部分。這在很多時(shí)候簡(jiǎn)化了數(shù)據(jù)查詢的結(jié)構(gòu)構(gòu)造過程。
              在ORM中主鍵因?yàn)榫彺娴拇嬖诙@出與其他字段的區(qū)別。ORM的使用使得數(shù)據(jù)存儲(chǔ)的分解策略得到擴(kuò)充。并不是所有的表的更新頻度都是一致的,而且表中的數(shù)據(jù)量大小也不同。字典表一般較小,而且很少更新,可以安全的復(fù)制。在整個(gè)數(shù)據(jù)存儲(chǔ)框架中,ORM作為獨(dú)立的技術(shù)元素參與數(shù)據(jù)存儲(chǔ)過程,通過主鍵提供緩存服務(wù),產(chǎn)生了新的數(shù)據(jù)分布模型,提供了新的性能優(yōu)化契機(jī)。


          Feedback

          # re: 關(guān)系模型與ORM  回復(fù)  更多評(píng)論   

          2008-01-06 19:14 by www.ks123.org
          www.ks123.org

          # re: 關(guān)系模型與ORM  回復(fù)  更多評(píng)論   

          2008-01-07 12:46 by sitinspring
          留個(gè)記號(hào)細(xì)看。

          # re: 關(guān)系模型與ORM  回復(fù)  更多評(píng)論   

          2008-06-12 14:13 by 連連看
          你的文章很深?yuàn)W啊
          主站蜘蛛池模板: 冷水江市| 大丰市| 林周县| 梧州市| 友谊县| 龙门县| 安塞县| 阜康市| 海林市| 石狮市| 衡山县| 郑州市| 迁安市| 沙雅县| 郓城县| 澎湖县| 合肥市| 额敏县| 邹城市| 盱眙县| 嘉鱼县| 农安县| 公安县| 扶风县| 新巴尔虎右旗| 内丘县| 临武县| 林州市| 南溪县| 库尔勒市| 漳平市| 常州市| 金华市| 阳山县| 黄平县| 资中县| 梅河口市| 武穴市| 隆林| 吴堡县| 莱阳市|