复合主键中可为空的列有什么问题?

2023-12-12

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(使用前将#替换为@)

复合主键中可为空的列有什么问题? 的相关文章

随机推荐