Vil*_*lx- 2 rdbms database-design rdbms-agnostic
昨天在从事一个项目时,我想出了一种特殊的1:1关系让我感到疑惑 - 如何最好地实现这一点(显然,我们做错了:D)
这个想法是有两种类型的实体,A和B.它们可以各自独立存在,但它们之间也可以有链接.如果有链接,那么它必须是1:1链接,并且双向工作.
它就像一个瓶子和一个帽子.它们可以分开存在,但是当它们连接在一起时,瓶子将只有一个盖子,并且盖子将仅连接到一个(和相同的)瓶子上.
您如何实现这种关系,同时牢记关于规范化,数据完整性等的所有最佳实践?
补充:几乎忘了说 - 他们每个都有十几个属性,所以将它们放在同一个表中,其中一半字段为NULL是一个非常尴尬的解决方案.此外,可以随时破坏链接并使用其他实体重新创建链接.
小智 7
为了解决这个问题,我将从标准的多对多关系布局开始.
TableA
AId
AInfo
TableB
BId
BInfo
TableA2B
AId
BId
Run Code Online (Sandbox Code Playgroud)
然后,我将使用触发器,唯一索引,约束来强制执行表中的1:1关系.确切的方法取决于系统需求.
我喜欢这种格式的原因是许多关系将属性作为关系的一部分而不是实体的一部分.这种模式允许现在和将来.
例如:一个人为公司工作.该关系的雇用日期与个人实体或公司实体不相符.