弥合对象/关系之间的鸿沟(五)—— 映射(二)关系的映射

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

 

 

映射(二)

 

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

 

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

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

 

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

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

 

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

 

 

下一篇 持久性API

-- Scott, Programmer in Beijing [If you can’t explain it to a six year old, you don’t understand it yourself. —Albert Einstein ]
posted @ 2012-04-11 21:02  ScottGu  阅读(290)  评论(0编辑  收藏  举报