<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

    對象/關系映射--關聯模式

    Posted on 2005-01-12 20:03 海天一鷗 閱讀(566) 評論(0)  編輯  收藏 所屬分類: J2EE Java數據庫技術

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

    By axing

    將對象關聯映射到表的模式

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

    模式:Foreign Key Association

    摘要

    該模式展示了如何將對象間的1:n的關系映射到關系型數據庫表中。

    示例

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

    問題

    如何把1:n的關系映射到關系型數據庫表中?

    約束

    參見一般約束

    解決方案

    在依賴(dependent)對象的表中插入所屬(owner)對象的OID。這個OID可以是數據庫的關鍵字或一個Synthetic Object Identity。

    結構

    結論

    1. 讀性能:讀取一個訂單對象將需要一個連接操作或兩次讀操作。可以在訂單對象中加入到訂單明細的引用集合。
    2. 寫性能:該模式將按照1:n的關聯寫入依賴對象,如果寫入操作不寫入未改變的對象的話,那么寫入的成本依賴于改變的依賴對象的個數。
    3. 性能和冗余 VS 維護成本和普通窗體:該映射模式是關系數據庫中最常見的模式,因此它和普通的窗體并沒有任何的沖突,因此它的維護成本是比較合理的。
    4. 所占空間接近于最優--除了在依賴對象表中需要的外鍵字段以外。
    5. 特殊查詢:由于映射是關系數據庫應用最為常見的形式,因此特殊的查詢也是不難實現的。
    6. 應用程序類型:這種映射模式最適合于關系型應用程序。它不適合用于CAD或CASE應用系統中。因為它是基于以外鍵形式連接關系表的。實現一個關聯需要一次的連接操作或兩次的數據庫訪問。基于頁面的存儲系統,例如OODBMS,能夠更快的處理類似的問題。
    7. 和舊有系統的集成:因為大多數的舊有系統正式使用這種映射關系的,把1:n的關聯轉換為對象不會出現任何新的問題。

    實現

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


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

    相關模式

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

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

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

     

    模式Association Table

    摘要

    該模式展示了怎樣把對象間n:m的關系映射到關系型數據庫表中。

    示例

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

    問題

    怎樣把n:m的關系映射到關系型數據庫?

    約束

    參見通用約束

    解決方案

    創建一張單獨的表,來存放兩種對象類型的關系中的對象標志(或外鍵)。其它的對象類型到表的映射可以使用另外適當的模式來處理。

    結構

    結論

    這里的結論和Foreign Key Association中是類似的,只是在環境上有些許的不同,因此這里我們就不重復了。

    實現

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

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

    相關模式

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

    已知應用

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

    One Inheritance Tree One Table and One Class One Table曾在POET [POE96]的對象/關系網關被討論過,同時被提及的還包括One Inheritance Path One Table。后者還被Champs和HYPO的項目中[Col+96, Hah+95, Kel+96]。

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

    主站蜘蛛池模板: 日本亚洲免费无线码| 亚洲AV午夜成人影院老师机影院| 亚洲国产高清视频在线观看| 女人隐私秘视频黄www免费| 亚洲日韩中文字幕日韩在线| 免费人成在线观看播放a| 凹凸精品视频分类国产品免费| 亚洲精品无码久久久久秋霞| 免费看片A级毛片免费看| 亚洲AV无码一区二区三区牲色| 午夜色a大片在线观看免费| 国产区图片区小说区亚洲区| 亚洲XX00视频| CAOPORN国产精品免费视频| 亚洲欧洲成人精品香蕉网| 最近免费中文字幕MV在线视频3| 国产亚洲精品国产| 最近2019中文字幕免费直播| 亚洲精品视频免费看| 成人女人A级毛片免费软件| 99999久久久久久亚洲| 国产精品视频免费一区二区三区| 国产成人综合亚洲| 中文字幕亚洲一区二区三区| 小日子的在线观看免费| 亚洲影视自拍揄拍愉拍| 免费大片黄手机在线观看| 中文成人久久久久影院免费观看| 亚洲国产日韩一区高清在线| 中文字幕无码免费久久99| 女人裸身j部免费视频无遮挡| 亚洲午夜福利AV一区二区无码| 免费A级毛片av无码| 亚洲精华国产精华精华液网站 | 成人免费福利视频| 亚洲熟妇久久精品| 国产亚洲午夜高清国产拍精品| 一区二区三区观看免费中文视频在线播放 | 亚洲AV无码专区国产乱码电影 | 国产网站在线免费观看| 国产真人无码作爱视频免费 |