3

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

我一直无法正确理解这一切。

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

4

2 回答 2

4

为什么规定外键为空。

可选的参与条件。当孩子有单亲或非单亲时,这是对表之间的这种关系进行建模的一种方法。

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

如果该值不是 null,则该子级有一个父级,并且该值必须是现有的父级 ID。

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

可以使用多对多表对此进行建模,没有任何约束意味着参与是可选的,但为了确保一对一的关系,您需要使每个外键列唯一(以及NOT NULL) . 我个人觉得这个选项有点矫枉过正(如果需求发生变化,它可以改变)。

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

于 2012-08-08T15:17:46.890 回答
2

可空外键本质上意味着关系是可选的。

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

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

当关系依赖于状态时,可选关系很有用。例如,只有当客户被批准为客户时,客户才会被分配到分支机构,在此之前,客户的BranchId将为 NULL,等等。

于 2012-08-08T15:19:26.713 回答