爲什麼SQL標準接受這個?哪些好處?爲什麼這種外鍵可能?
如果有這些表:
create table prova_a (a number, b number);
alter table prova_a add primary key (a,b);
create table prova_b (a number, b number);
alter table prova_b add foreign key (a,b) references prova_a(a,b) ;
insert into prova_a values (1,2);
你可以沒有錯誤插入此:
insert into prova_b values (123,null);
insert into prova_b values (null,123);
注1:這來源於此answer。
注2:這可以避免,兩列設置不爲空。
備註:我不是在問關於避免,我關心哪些是好處。
參考文獻:
Oracle documentation:關係模型允許外鍵的值要匹配被引用的主鍵或唯一鍵的值,或爲null。如果組合外鍵的任何列爲空,則該鍵的非空部分不必匹配父鍵的任何對應部分。
SQL Server documentation:FOREIGN KEY約束可以包含空值;但是,如果複合FOREIGN KEY約束的任何列包含空值,則會跳過組成FOREIGN KEY約束的所有值的驗證。
MSSQL允許這... – FerranB 2009-02-06 09:04:18
我想我並不明確,當我說,「當涉及到外鍵」。我的意思是存在外鍵約束。 SQLite解析,但不強制約束。 – colithium 2009-02-06 11:17:15