2

http://msdn.microsoft.com/en-us/library/ms175464(v=sql.105).aspxから次の段落をコピーしました

FOREIGN KEY 制約には null 値を含めることができます。ただし、複合 FOREIGN KEY 制約のいずれかの列に NULL 値が含まれている場合、FOREIGN KEY 制約を構成するすべての値の検証はスキップされます。複合 FOREIGN KEY 制約のすべての値が検証されるようにするには、関係するすべての列で NOT NULL を指定します。

上記を理解するのに役立つ簡単な例を誰かが教えてくれませんか? 外部キー制約はどのような検証を行いますか? これは参照整合性と関係があると思います。

どうもありがとう。

4

3 に答える 3

2

別の見方をすれば、例は必要ありません。

複合外部キーのいずれかのフィールドがそうである場合、キーのすべてのNULLフィールドが提供されるまで、他のフィールドの整合性はチェックされません。

于 2012-06-04T20:53:12.583 に答える
2

以下の 2 つの列を使用する複合外部キーがある場合、関係は適用されません (Name はNULLOtherId 2 のためです)。

OtherId  Name
-------  -------
1        Abe
2        NULL
3        Jim
4        Bob

関係が強制されないため、参照整合性を強制することはできません。どちらの列も NULL 値を持つことができないように指定すると、このような状況に陥ることはなく、参照整合性が維持されます。

于 2012-06-04T20:54:06.470 に答える
1

次に例を示します。

create table t1 (id1 int, id2 int,
    constraint PK_T1 primary key (id1, id2))
create table t2 (id1 int, id2 int)

insert t2 values (1,null)

alter table t2 add constraint FK_T2_T1 foreign key (id1, id2) references t1(id1, id2)

最後の行でエラーが発生するはずです。結局のところ、t1は空であるため、 の 1 行がt2何も参照できない可能性があります。しかし、列の 1 つにnull値が含まれているため、検証はスキップされます。

于 2012-06-04T20:53:03.263 に答える