ORACLE 不允许在构成主键的任何列中使用 NULL 值。大多数其他“企业级”系统似乎也是如此。
同时,大多数系统还允许对可空列进行唯一约束。
为什么唯一约束可以有 NULL 而主键不能?这是否有基本的逻辑原因,或者这更多是技术限制?
最佳答案
主键用于唯一标识行。这是通过将键的所有部分与输入进行比较来完成的。
根据定义,NULL 不能成为成功比较的一部分。即使是与自身的比较 (NULL = NULL
) 也会失败。这意味着包含 NULL 的 key 将不起作用。
此外,外键中允许使用 NULL,以标记可选关系。(*) 在 PK 中也允许使用 NULL 会破坏这一点。
(*)提醒一句:具有可为空的外键并不是干净的关系数据库设计。
如果有两个实体 A
和 B
其中 A
可以选择与 B
相关,干净解决方案是创建一个解析表(比方说 AB
)。该表会将 A
与 B
链接起来:如果 存在关系,则它将包含一条记录,如果不存在 那么它就不会了。
关于database - 复合主键中的可为空列有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/386040/