为什么 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:这来自这个答案。
注意2:这可以避免,在两列上都设置不为空。
备注:我不是问避免,我感兴趣的是哪些是好处。
参考:
Oracle 文档: 关系模型允许外键的值与引用的主键或唯一键值匹配,或者为空。如果复合外键的任何列为空,则该键的非空部分不必匹配父键的任何对应部分。
SQL Server 文档:外键约束可以包含空值;但是,如果复合 FOREIGN KEY 约束的任何列包含空值,则会跳过对构成 FOREIGN KEY 约束的所有值的验证。