zoukankan      html  css  js  c++  java
  • 弥合对象/关系之间的鸿沟(五)—— 映射(二)关系的映射

     弥合对象/关系之间的鸿沟(五)

    映射(二)

      在一个规范化后的关系模式中,如果有一个表的许多行关联另一个表的许多行的关系(也就是多对多),通常由连接表表示,连接表中的每一行都包含这两个相关联的表的外键。如果EMPLOYEE表的多行与PROJECT表的多行相关联,第三个表(即连接表)需要维持一个规范化后的架构(图7)。EMPLOYEE_PROJECT表包含两列:EMPLOYEE表的外键列与PROJECT表的外键列。因此,使用两个外键连接两个表映射到领域类的关系时,这两个领域类双方都会包含多值字段指向对方。

      嵌入。如需改善封装性,为字段的集合建模可能会有帮助,将此模型作为领域类中一个单独的类。此映射的概念被称为嵌入,因为与嵌入类对应的列,与映射到的领域类一样嵌入在同一个表。 

    图8a所示,一个Employee类可能包含多个字段来表示一个家庭地址。这些字段都被映射到了EMPLOYEE表的列。图8B显示了相同的数据库模式使用不同的映射的方式,即使用一个嵌入的Address类映射到同一表中同样的所有列。

      依赖。在领域对象模型中有组合(composition)模式(pattern)很常见,在此模式中,一个实例集合的生命周期依赖于另一个实例。在数据库中,存储依赖实例的表无法从其他表中区分出来。但是,领域模型的行为要求,如果拥有集合的实例中的关系被删除,然后依赖实例对应的行也应被删除。 

    在图9中,技能关系被标记为依赖,如果从拥有技能集合的Employee类实例中删除一个Skill实例,持久性提供程序会从数据库中的SKILL表中删除相应的行。

    前面的介绍,涵盖了很多映射领域类和规范化的数据库模式时的常见情况。更复杂的领域类也可以映射到更复杂的数据库模式(schema)。

    下一篇 持久性API

  • 相关阅读:
    AcWing 1027. 方格取数 dp
    AcWing 1014. 登山 dp
    acwing 482. 合唱队形 dp
    LeetCode 1463. 摘樱桃II dp
    LeetCode 100. 相同的树 树的遍历
    LeetCode 336. 回文对 哈希
    LeetCode 815. 公交路线 最短路 哈希
    算法问题实战策略 DARPA大挑战 二分
    算法问题实战策略 LUNCHBOX 贪心
    AcWing 1100. 抓住那头牛 BFS
  • 原文地址:https://www.cnblogs.com/scottgu/p/2442955.html
Copyright © 2011-2022 走看看