<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    海鷗航際

    JAVA站
    posts - 11, comments - 53, trackbacks - 1, articles - 102

    摘要
    這一章節(jié)描述了兩種用于映射對(duì)象間關(guān)系的模式:Foreign Key Association和Association Table。注意,1:n關(guān)聯(lián)背后隱藏的問(wèn)題和Representing Collections in a Relational Database [Bro+96]中描述的問(wèn)題是一致的。(2002-08-20 12:29:17)

    By axing

    將對(duì)象關(guān)聯(lián)映射到表的模式

    這一章節(jié)描述了兩種用于映射對(duì)象間關(guān)系的模式:Foreign Key Association和Association Table。注意,1:n關(guān)聯(lián)背后隱藏的問(wèn)題和Representing Collections in a Relational Database [Bro+96]中描述的問(wèn)題是一致的。

    模式:Foreign Key Association

    摘要

    該模式展示了如何將對(duì)象間的1:n的關(guān)系映射到關(guān)系型數(shù)據(jù)庫(kù)表中。

    示例

    考慮經(jīng)典的訂單/訂單明細(xì)(Order / OrderItem)的例子,一張有效的訂單將包含0個(gè)以上的訂單明細(xì)。

    問(wèn)題

    如何把1:n的關(guān)系映射到關(guān)系型數(shù)據(jù)庫(kù)表中?

    約束

    參見(jiàn)一般約束

    解決方案

    在依賴(dependent)對(duì)象的表中插入所屬(owner)對(duì)象的OID。這個(gè)OID可以是數(shù)據(jù)庫(kù)的關(guān)鍵字或一個(gè)Synthetic Object Identity。

    結(jié)構(gòu)

    結(jié)論

    1. 讀性能:讀取一個(gè)訂單對(duì)象將需要一個(gè)連接操作或兩次讀操作。可以在訂單對(duì)象中加入到訂單明細(xì)的引用集合。
    2. 寫性能:該模式將按照1:n的關(guān)聯(lián)寫入依賴對(duì)象,如果寫入操作不寫入未改變的對(duì)象的話,那么寫入的成本依賴于改變的依賴對(duì)象的個(gè)數(shù)。
    3. 性能和冗余 VS 維護(hù)成本和普通窗體:該映射模式是關(guān)系數(shù)據(jù)庫(kù)中最常見(jiàn)的模式,因此它和普通的窗體并沒(méi)有任何的沖突,因此它的維護(hù)成本是比較合理的。
    4. 所占空間接近于最優(yōu)--除了在依賴對(duì)象表中需要的外鍵字段以外。
    5. 特殊查詢:由于映射是關(guān)系數(shù)據(jù)庫(kù)應(yīng)用最為常見(jiàn)的形式,因此特殊的查詢也是不難實(shí)現(xiàn)的。
    6. 應(yīng)用程序類型:這種映射模式最適合于關(guān)系型應(yīng)用程序。它不適合用于CAD或CASE應(yīng)用系統(tǒng)中。因?yàn)樗腔谝酝怄I形式連接關(guān)系表的。實(shí)現(xiàn)一個(gè)關(guān)聯(lián)需要一次的連接操作或兩次的數(shù)據(jù)庫(kù)訪問(wèn)。基于頁(yè)面的存儲(chǔ)系統(tǒng),例如OODBMS,能夠更快的處理類似的問(wèn)題。
    7. 和舊有系統(tǒng)的集成:因?yàn)榇蠖鄶?shù)的舊有系統(tǒng)正式使用這種映射關(guān)系的,把1:n的關(guān)聯(lián)轉(zhuǎn)換為對(duì)象不會(huì)出現(xiàn)任何新的問(wèn)題。

    實(shí)現(xiàn)

    1. 一般性能:如果性能上出現(xiàn)低效的情況,你可以考慮在對(duì)象/關(guān)系映射層下面再增加一個(gè)關(guān)系型數(shù)據(jù)庫(kù)訪問(wèn)層,并應(yīng)用性能改進(jìn)模式,例如Controlled Redundancy、Denormalization、或Overflow Tables [Kel+97]。這些模式的目的是為了讓你在不影響邏輯映射模式的前提下優(yōu)化物理表模式。
    2. 更新性能:當(dāng)更新訂單明細(xì)對(duì)象(依賴對(duì)象)時(shí),你應(yīng)該只更新那些已經(jīng)被修改的對(duì)象。更新和插入操作都是較為昂貴的操作。
    3. 預(yù)取依賴對(duì)象:在這個(gè)例子中,大多數(shù)的用例都需要讀入所有的依賴對(duì)象(如訂單明細(xì)),你可以使用連接操作來(lái)獲得所有的數(shù)據(jù),并從單個(gè)數(shù)據(jù)庫(kù)操作的返回值中構(gòu)建所有者對(duì)象和依賴對(duì)象:


      select * from Order O, OrderItem I
      where O.key = ‘YourOrderKey’ and
      O.key = I.OrderKey

    相關(guān)模式

    在實(shí)踐中,1:n的關(guān)聯(lián)總是難以和聚合分離開(kāi)來(lái)。因此在研究本模式時(shí)也需要同時(shí)參考聚合模式Single Table Aggregation和Foreign Key Aggregation。后者和該模式同樣的解決方案,只有稍許的不同。

    使用外鍵的備選方案,包括Controlled Redundancy、Denormalization和Overflow Tables [Kel+97]。

    該模式和Association Table模式非常相近,后者是用戶解決n:m映射的問(wèn)題。參看Representing Object Relationships as Tables [Bro+96]。

     

    模式Association Table

    摘要

    該模式展示了怎樣把對(duì)象間n:m的關(guān)系映射到關(guān)系型數(shù)據(jù)庫(kù)表中。

    示例

    員工對(duì)象和部門對(duì)象間存在著n:m的關(guān)系。一個(gè)員工可以在多個(gè)部門中工作,一個(gè)部門通常也包含了不只一個(gè)的員工。

    問(wèn)題

    怎樣把n:m的關(guān)系映射到關(guān)系型數(shù)據(jù)庫(kù)?

    約束

    參見(jiàn)通用約束

    解決方案

    創(chuàng)建一張單獨(dú)的表,來(lái)存放兩種對(duì)象類型的關(guān)系中的對(duì)象標(biāo)志(或外鍵)。其它的對(duì)象類型到表的映射可以使用另外適當(dāng)?shù)哪J絹?lái)處理。

    結(jié)構(gòu)

    結(jié)論

    這里的結(jié)論和Foreign Key Association中是類似的,只是在環(huán)境上有些許的不同,因此這里我們就不重復(fù)了。

    實(shí)現(xiàn)

    1. 一般性能:如果性能沒(méi)有達(dá)到預(yù)期效果,可以考慮使用數(shù)據(jù)庫(kù)優(yōu)化模式,例如Controlled Redundancy、Denormalization、or Overflow Tables [Kel+97]。我們的例子中處理了n:m的關(guān)系,這會(huì)使關(guān)系變得更為復(fù)雜。因此可以把它打散,以便于實(shí)行數(shù)據(jù)庫(kù)優(yōu)化。
    2. 預(yù)取對(duì)象:如果在上面的例子中,你預(yù)先知道大多數(shù)的用例都需要讀出所有的依賴對(duì)象,例如部門中的員工。那就可以使用連接操作獲取所有的數(shù)據(jù),并從數(shù)據(jù)集中構(gòu)建部門對(duì)象和員工對(duì)象。如:

      select * from DepartmentTable D, EmployeeDepartmentTable ED,EmployeeTable E
      where D.SyntheticOID = ‘YourDepartment’
      D.SyntheticOID = ED.DepartmentKey and
      ED.EmployeeKey = E.SyntheticOID

    相關(guān)模式

    該模式,非常接近于Foreign Key Association。參看Representing Object Relationships as Tables [Bro+96]。

    已知應(yīng)用

    Single Table Aggregation, Foreign Key Aggregation, Foreign Key Association, 和Association Table已用于Persistence [www.persistence.com]和TopLink的Smalltalk框架[www.objectpeople.com/toplink/],以及其它的大多數(shù)持久性框架中。這些模式還被用于HYPO-Bank [Col+96,Kel+96]的對(duì)象/關(guān)系訪問(wèn)層,和POET [POE96]的對(duì)象/關(guān)系網(wǎng)關(guān)。

    One Inheritance Tree One Table and One Class One Table曾在POET [POE96]的對(duì)象/關(guān)系網(wǎng)關(guān)被討論過(guò),同時(shí)被提及的還包括One Inheritance Path One Table。后者還被Champs和HYPO的項(xiàng)目中[Col+96, Hah+95, Kel+96]。

    Objects in BLOBs曾用在SMRC搜索原型上[Rei+94, Rei+96]。

    主站蜘蛛池模板: 日本妇人成熟免费中文字幕| 99re这里有免费视频精品| 精品免费国产一区二区三区| wwwxxx亚洲| 国产精品久久永久免费| 亚洲视频在线不卡| 黄+色+性+人免费| 99亚偷拍自图区亚洲| 成人毛片免费网站| 亚洲精品伦理熟女国产一区二区| 成年女人毛片免费观看97| 亚洲人成人网站18禁| 亚洲va中文字幕无码| 国产免费AV片在线观看播放| 久久精品国产69国产精品亚洲| 嫩草成人永久免费观看| 亚洲三级在线免费观看| 国产成人精品免费直播| gogo免费在线观看| 日木av无码专区亚洲av毛片| 18国产精品白浆在线观看免费| 亚洲另类无码专区丝袜| 亚洲视频一区二区| 91视频免费网址| 国产大陆亚洲精品国产| 久久亚洲国产精品123区| 最近中文字幕无免费| 亚洲精品美女久久7777777| 中文字幕在亚洲第一在线| 最近新韩国日本免费观看 | 一区二区三区视频免费观看| 亚洲AV无码一区二区二三区入口| 在线永久看片免费的视频| 黄页免费视频播放在线播放| 亚洲AV综合色区无码一区爱AV| 91在线视频免费91| 国产免费一级高清淫曰本片| 亚洲av无码一区二区三区观看| 久久夜色精品国产亚洲av| 在线看免费观看AV深夜影院| 一个人看的www视频免费在线观看|