三个实体交叉表“很多很多”

时间:2010-08-09 19:55:55

标签: sql database-design many-to-many entity

我目前正致力于数据模型设计(将由RDMS支持)。它基于与组织成员的福利有关的3个实体。实体是福利,会员类型和提供者。我创建了一个标准的多对多交叉表来关联两个实体,但从来没有3.我想知道是否有人做过这样的事情,如果有任何潜在的陷阱我应该保持。该表如下所示:

create table BENEFIT_MEM_TYPE_PROVIDER
(
   BENEFIT_ID reference BENEFITS not null,
   MEMBERSHIP_TYPE_ID reference MEMBERSHIP_TYPES not null,
   PROVIDER_ID reference PROVIDERS not null,
   primary key (BENEFIT_ID, MEMBERSHIP_TYPE_ID, PROVIDER_ID)
)

关于这种关系的某些事情并不适合我,所以我想我会向聪明人询问任何建议。

由于

3 个答案:

答案 0 :(得分:4)

  

任何人都做过这样的事情

  

如果有任何潜在的陷阱,我应该留意。

如果Benefit-Membership,Benefit-Provider和Membership-Provider之间存在关系,这可能会导致问题,这些关系可能从此表中的数据看似真实,但实际上不应该是真的。

例如,成员 - 提供者 - 福利可能具有“限制”,即当涉及特定提供者时,福利仅适用于成员。这种关系可能通常不正确,但由于某种特殊情况,这种关系是正确的。

在这种情况下,您需要在此表中进行该限定,以确保可以通过简单的SQL查询正确发现这些异常情况。

简而言之,当您有多个关系时,请确保每行中的成对关系也是正确的。

答案 1 :(得分:3)

三元关系被广泛使用,尽管没有像二元关系那样广泛使用。这甚至可以扩展到第四纪或一般的n元关系。

您可以在数据库设计中看到n-ary关系的地方是星型模式。星形中心的事实表是一个n元关系,其中n是事实表引用的维度表的数量。

归一化过程包括检测偏离某些正常形式,以及分解表以产生更标准化的等价物。分解有时会导致降低n元关系的顺序。

明星模式故意转向其他方式。这就是为什么星形模式和规范化常常被视为彼此不一致的原因。

答案 2 :(得分:0)

您应该验证您的表格是否满足第五范式(5NF)。如果没有,则最好将其标准化,使其达到5NF。