Postgresql
具有 NULL 值的多列 FK
我了解在 PostgreSQL 中,如果表與表之間存在多列 FK,並且表
B
中A
的一個或多個 FK 列可以為空,那麼對於此類列的值所在B
的行,FK 仍被視為“受尊重”B
確實 NULL 沒有檢查表中是否存在相應行A
(因為主鍵列不能為空):但是,這是特定於 PostgreSQL 的還是在 SQL 標準中?(用 SQL Fiddle 進行實驗,似乎 MS SQL Server 和 MySQL 的行為方式相同)。
這種行為(允許
NULL
FK 列中的值)符合 SQL 標準。手冊:該
CREATE TABLE
命令符合 SQL 標準,但下面列出了例外情況。FK 約束也不例外。
要禁止多列 FK 的某些
MATCH FULL
列為 NULL,請使用而不是預設MATCH SIMPLE
行為。手冊:
MATCH FULL
除非所有外鍵列都為空,否則不允許多列外鍵的一列為空;如果它們都為空,則該行不需要在引用的表中具有匹配項。或者只是定義部分或全部列
NOT NULL
。更多資訊(正如@ypercube 評論的那樣):