ORACLE 不允许在构成主键的任何列中出现 NULL 值。大多数其他“企业级”系统似乎也是如此。
同时,大多数系统还允许unique对可为空的列的约束。
为什么唯一约束可以有 NULL 而主键却不能?这是否有根本的逻辑原因,或者这更多的是技术限制?
主键用于唯一标识行。这是通过将键的所有部分与输入进行比较来完成的。
根据定义,NULL 不能成为成功比较的一部分。甚至与自身进行比较(NULL = NULL
) 将失败。这意味着包含 NULL 的键将不起作用。
Additonally, NULL is allowed in a foreign key, to mark an optional relationship.(*) Allowing it in the PK as well would break this.
(*)A word of caution: Having nullable foreign keys is not clean relational database design.
如果有两个实体A
and B
where A
可以选择与B
,干净的解决方案是创建一个解析表(假设AB
)。该表将链接A
with B
: 如果有is一个关系,那么它会包含一个记录,如果有的话isn't那么就不会了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)