我对表中外键关系的理解是外键是子表中的一列,是父表中的主键。我们知道主键是唯一的而不是null。我有一些疑问和要求澄清。 当父表有数据时,孩子是否还必须拥有相关数据? can子表有空值(外键空值)。 为什么外键的规定为空。
我无法正确理解所有这些。
帮助我让我更好地理解这些概念。 提前谢谢。
答案 0 :(得分:4)
为什么外键的规定为null。
可选参与条件。当一个孩子有一个父母或一个父母时,这是建立这些表格之间关系的一种方法。
如果值为null
,则该孩子没有父母。
如果值不 null
,则子项具有父项,值必须为现有父项ID。
如果你有这样的关系并且在外键列中不允许null
,那么你就不能让一个没有父母的孩子。
你可以使用多对多表对其进行建模,没有任何限制就意味着参与是可选的,但要确保一对一的关系,你需要做每个外键列都是唯一的(以及NOT NULL
)。我个人觉得这个选项太过分了(如果需求发生变化,可以更改)。
两者之间的选择是实用性(例如,模型从一对一变为一对多或多对多的可能性有多大?),尽管关系纯粹主义者会选择多对多选项。
答案 1 :(得分:2)
可空的外键实质上意味着这种关系是可选的。
假设正在检查FK约束,那么如果外键不为null,则其值必须存在于引用的表中。
但是,如果外键的值为null,则表示该关系不存在。通常,在这种情况下,您将LEFT / RIGHT OUTER JOIN以防止在JOIN中过滤掉空值。
当状态相关的关系时,可选关系很有用。
例如。如果客户被批准为客户,则客户将仅被分配到分支机构,在此之前,客户的BranchId
将为NULL等。