Postgresql

具有 NULL 值的多列 FK

  • January 8, 2018

我了解在 PostgreSQL 中,如果表與表之間存在多列 FK,並且表BA的一個或多個 FK 列可以為空,那麼對於此類列的值所在B的行,FK 仍被視為“受尊重”B確實 NULL 沒有檢查表中是否存在相應行A(因為主鍵列不能為空):

SQL小提琴

但是,這是特定於 PostgreSQL 的還是在 SQL 標準中?(用 SQL Fiddle 進行實驗,似乎 MS SQL Server 和 MySQL 的行為方式相同)。

這種行為(允許NULLFK 列中的值)符合 SQL 標準。手冊:

CREATE TABLE命令符合 SQL 標準,但下面列出了例外情況。

FK 約束也不例外。

要禁止多列 FK 的某些MATCH FULL列為 NULL,請使用而不是預設MATCH SIMPLE行為。手冊:

MATCH FULL除非所有外鍵列都為空,否則不允許多列外鍵的一列為空;如果它們都為空,則該行不需要在引用的表中具有匹配項。

或者只是定義部分或全部列NOT NULL。更多資訊(正如@ypercube 評論的那樣):

引用自:https://dba.stackexchange.com/questions/82058