小编典典

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

all

ORACLE 不允许在包含主键的任何列中使用 NULL 值。大多数其他“企业级”系统似乎也是如此。

同时,大多数系统还允许可空列上 的唯一 约束。

为什么唯一约束可以有 NULL 而主键不能?这是否有一个基本的逻辑原因,或者这更多的是技术限制?


阅读 55

收藏
2022-08-24

共1个答案

小编典典

主键用于唯一标识行。这是通过将键的所有部分与输入进行比较来完成的。

根据定义,NULL 不能成为成功比较的一部分。即使与自身 ( NULL = NULL) 进行比较也会失败。这意味着包含 NULL 的键将不起作用。

此外,外键中允许使用 NULL,以标记可选关系。(*)允许它在 PK 中也会打破这一点。


(*)提醒一句:具有可为空的外键不是干净的关系数据库设计。

如果有两个实体A并且可以选择与Bwhere相关联,则干净的解决方案是创建一个解析表(比如说)。该表将链接:如果存在 关系
,则它将包含一条记录,如果 没有 ,则它不会。A``B``AB``A``B

2022-08-24