首页 > 解决方案 > 子表中的外键列是否必须为 NOT NULL?

问题描述

我使用列组合作为主键并在子表中引用该主键。既然是多列的组合,那么子表中的所有列是否都需要用NOT NULL约束来定义呢?

例如,假设header有一个主键和列 A、B 和 C 的散列函数,并且line表有一个具有列 A、B 和 C 的散列函数的外键。那么列 A、子表中的 B 和 C 列都不是 NULL 吗?

标签: postgresqlforeign-keysconstraints

解决方案


您应该查阅文档

通常,如果引用行的任何引用列为空,则引用行不需要满足外键约束。如果将 MATCH FULL 添加到外键声明中,则仅当引用行的所有引用列都为 null 时才会满足约束(因此保证 null 和非 null 值的混合会导致 MATCH FULL 约束失败)。如果您不希望引用行能够避免满足外键约束,请将引用列声明为 NOT NULL。

也就是说,这是您可以做出的选择,具体取决于您允许或不想允许什么。


推荐阅读