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:これは回避できます。両方の列にnullを設定しないでください。
備考:回避については質問していません。どちらがメリットになるのか興味があります。
参照:
Oracleのドキュメント: リレーショナルモデルでは、外部キーの値を、参照されているプライマリキーまたは一意キーの値と一致させるか、nullにすることができます。複合外部キーのいずれかの列がnullの場合、キーのnull以外の部分は、親キーの対応する部分と一致する必要はありません。
SQL Serverのドキュメント:FOREIGNKEY制約にはnull値を含めることができます。ただし、複合FOREIGN KEY制約のいずれかの列にNULL値が含まれている場合、FOREIGNKEY制約を構成するすべての値の検証はスキップされます。