【发布时间】:2021-10-13 08:07:30
【问题描述】:
我使用列组合作为主键并在子表中引用该主键。既然是多列的组合,那么子表中的所有列是否都需要用NOT NULL约束来定义?
例如,假设header 有一个主键,主键是 A、B 和 C 列的散列函数,line 表有一个外键,外键是 A、B 和 C 列的散列函数。
那么子表中的A、B、C列是不是必须不为NULL呢?
【问题讨论】:
标签: postgresql foreign-keys constraints
我使用列组合作为主键并在子表中引用该主键。既然是多列的组合,那么子表中的所有列是否都需要用NOT NULL约束来定义?
例如,假设header 有一个主键,主键是 A、B 和 C 列的散列函数,line 表有一个外键,外键是 A、B 和 C 列的散列函数。
那么子表中的A、B、C列是不是必须不为NULL呢?
【问题讨论】:
标签: postgresql foreign-keys constraints
您应该咨询documentation:
通常,如果引用行的任何引用列为空,则引用行不需要满足外键约束。如果将 MATCH FULL 添加到外键声明中,则仅当引用行的所有引用列都为 null 时,引用行才会满足约束(因此保证 null 和非 null 值的混合会导致 MATCH FULL 约束失败)。如果您不希望引用行能够避免满足外键约束,请将引用列声明为 NOT NULL。
也就是说,这是您可以做出的选择,具体取决于您允许或不想允许的操作。
【讨论】: