一对多数据库关系中的共享实体

时间:2011-08-02 19:41:00

标签: database uml relational-database dry

我有一个我正在设计的数据库。我有制造商,我在不同的表格上有经销商,其中包含几乎相同的信息,几乎没有例外。两个组都有一个需要连接的联系人。我创建了一个联系表来保存联系信息,一个!

我需要第二张联系表吗?我想尽可能让它成为DRY。那怎么样?提前谢谢

1 个答案:

答案 0 :(得分:1)

可能是party-role pattern的情况? ManufacturerDistributor是缔约方发挥的作用。联系人适用于缔约方,而不是其所扮演的角色。所以你有:

  • 名为Party
  • 的表格
  • 名为ContactMethod(或类似)
  • 的表格
  • 从Party到ContactMethod的1:M关系

这将解决对两个Contact表的需求。如何为角色方面建模将取决于更广泛的要求。规范模型将具有:

  • 一个名为Role
  • 的超类型
  • 从党到角色的M:M关系
  • 每个特定角色的角色子类型(在您的情况下为分销商和制造商)。

(注意:除此之外,这也允许一方扮演制造商和经销商的角色 - 可能相关或不相关)。

在关系表中实现子类型层次结构有3种“标准”模式:

  1. 整个层次结构的表格
  2. 每个叶子类型的表格
  3. 每种类型的表格
  4. 如果您没有任何特定于角色的关系,则适用

    (1)。 (但我怀疑这不太可能;可能与分销商有关的信息不适用于制造商,反之亦然)。
    (2)指来自Party的多个关系(即一个到每个角色子类型)。

    (3)避免上述两种情况,但意味着从党派到其角色的额外加入。

    就像我说的那样,选择取决于更广泛的要求。

    第h