对象/关系映射--聚合模式聚合映射的模式在面向对象建模期间(OOA)最难回答的问题是,何时使用聚合,何时使用关联。性能和灵活性的权衡将会影响到这个问题的答案。你可以使用Single Table Aggregation。这是一种最自然的聚合映射方式。你也可以使用Foreign Key Aggregation,它常常用于处理1:n聚合的映射,我们将在Foreign Key Aggregation的相关章节中讨论它。 模式:Single Table Aggregation摘要: 该模式展示了如何通过把所有的聚合的对象属性集成到单个的表中的方法把聚合映射到一个关系数据模型。 示例: 考虑下列的对象模型:
图1.一个AddressType,为其它的对象所聚合。 问题: 如何将聚合映射到关系表中? 约束:
解决方案: 把被聚合对象的属性和使用聚合对象的属性放在同一张表中。 结构:
使用聚合的对象被转换为物理数据模型的一张表中,被聚合对象的数据集成到该表中。 解决方法示例: 我们为Customer对象创建Customer表。InvoiceAddress和DeliveryAddress都集成到Customer表中。
图2.将一个被聚合的对象类型映射到使用聚合的对象的数据库表中。 我们使用前缀来区分同类的属性。这有点类似于C++中的命名空间的概念,例如Customer.DeliveryAddress.Street。 结论:
实现:
变化: 我们已经讨论了使用聚合对象类型和聚合对象类型之间最简单的1:1关系。Foreign Key Association模式描述了两种对象类型间1:n的关系,Overflow Table则展示了在1:n的关系下避免采用外键的技巧。 相关模式: Foreign Key Aggregation模式是Single Table Aggregation模式的备选方案。参考Representing Collections in a Relational Database [Bro+96]。当应用到普通的关系型数据库访问层的时候,还可以对比Denormalization [Kel+97]。 参考: 《Mainstream Objects》(Ed Yourdon [You+95] )在第21章完整的讨论了在建模时期何时使用聚合和关联、以及如何使用它们的问题。 上一篇:对象/关系映射--概述 下一篇:对象/关系映射--继承模式 更多相关文章
|
推荐文章
精彩文章
|