【发布时间】:2009-11-13 12:44:51
【问题描述】:
昨天在做一个项目时,我遇到了一种特殊的 1:1 关系,这让我想知道 - 如何最好地实现这一点(显然,我们做错了 :D)
这个想法是有两种类型的实体,A 和 B。它们可以各自独立存在,但它们之间也可以有联系。如果有链接,那么它必须是 1:1 链接,并且双向工作。
这就像一个瓶子和一个帽子。它们可以分开存在,但是当结合在一起时,瓶子将只有一个盖子,并且盖子将只连接到一个(并且是同一个)瓶子上。
您将如何实施这种关系,同时牢记有关规范化、数据完整性等的所有最佳实践?
补充:差点忘了说 - 它们每个都有十几个属性,所以将它们放在同一个表中,其中一半字段为 NULL 是一个非常尴尬的解决方案。此外,可以随时断开链接并与另一个实体重新创建链接。
【问题讨论】:
-
你描述的是多对多的关系。有许多可乐瓶和许多可乐盖。任何可乐盖都适合任何可乐瓶,但一个特定的可乐盖与一个特定的可乐瓶相关联。真正的一对一关系意味着我们有两个独立的实体,它们只能一起存在。如果我们有一个实体 A 的实例,我们必须有一个且只有一个匹配的实体 B 实例;此外,实体 B 的实例必须有一个且只有一个匹配的实体 A 实例。这通常是因为实体 B 是实体 A 的子类型(如实体 C、D 等)。
标签: database-design rdbms rdbms-agnostic