外键可以为空。为什么需要它?

时间:2012-08-08 15:14:52

标签: sql oracle

我对表中外键关系的理解是外键是子表中的一列,是父表中的主键。我们知道主键是唯一的而不是null。我有一些疑问和要求澄清。 当父表有数据时,孩子是否还必须拥有相关数据? can子表有空值(外键空值)。 为什么外键的规定为空。

我无法正确理解所有这些。

帮助我让我更好地理解这些概念。 提前谢谢。

2 个答案:

答案 0 :(得分:4)

  

为什么外键的规定为null。

可选参与条件。当一个孩子有一个父母或一个父母时,这是建立这些表格之间关系的一种方法。

如果值为null,则该孩子没有父母。

如果值 null,则子项具有父项,值必须为现有父项ID。

如果你有这样的关系并且在外键列中不允许null,那么你就不能让一个没有父母的孩子。

可以使用多对多表对其进行建模,没有任何限制就意味着参与是可选的,但要确保一对一的关系,你需要做每个外键列都是唯一的(以及NOT NULL)。我个人觉得这个选项太过分了(如果需求发生变化,可以更改)。

两者之间的选择是实用性(例如,模型从一对一变为一对多或多对多的可能性有多大?),尽管关系纯粹主义者会选择多对多选项。

答案 1 :(得分:2)

可空的外键实质上意味着这种关系是可选的。

假设正在检查FK约束,那么如果外键不为null,则其值必须存在于引用的表中。

但是,如果外键的值为null,则表示该关系不存在。通常,在这种情况下,您将LEFT / RIGHT OUTER JOIN以防止在JOIN中过滤掉空值。

当状态相关的关系时,可选关系很有用。 例如。如果客户被批准为客户,则客户将仅被分配到分支机构,在此之前,客户的BranchId将为NULL等。