为什么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