给定模式
PERSON { name, spouse }
其中 PERSON.spouse 是 PERSON.name 的外键,当一个人未婚或我们没有任何信息时,NULL 是必需的。
关于反对 null 的论点,在这种情况下您如何避免它们?
我有一个替代方案
PERSON { name } SPOUSE { name1, name2 }
其中 SPOUSE.name* 是对 PERSON 的 FK。我在这里看到的问题是,没有办法确保某人只有一个配偶(即使有所有可能的 UNIQUE 约束,也有可能有两个配偶)。
在 Material list 样式关系中排除空值的最佳方法是什么?
最佳答案
我认为对于这种类型的关系强制不使用 NULL 和不重复会使模式定义比实际需要的更复杂。即使您允许空值,一个人仍然有可能拥有多个配偶,或者有相互冲突的记录,例如:
PERSON { A, B }
PERSON { B, C }
PERSON { C, NULL }
您需要引入更多数据,例如性别(或同性婚姻的“配偶数”?)以确保仅允许一种类型的人拥有配偶。另一人的配偶将由第一人的记录决定。例如:
PERSON { A, FEMALE, B }
PERSON { B, MALE, NULL }
PERSON { C, FEMALE, NULL }
... 因此只有女性才能拥有非空 SPOUSE。
但是恕我直言,即使使用 NULL,这也过于复杂且不直观。如果没有 NULL,情况会更糟。除非您真的别无选择,否则我会避免进行这样的模式限制。
关于sql - 排除 Material list 样式关系中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368725/