1

I saw the answers about this topic but not exactly such as mine.

I created a db schema by using EF1 in designer. I added relation One Or Zero To Many between 2 tables (EntityA and EntityB). Next I added one record to table EntityA and one record to EntityB which has id to EntityA record. As I see in design mode (in MS SMS) that field EntityA_id (in table EntityB) is set to ALLOW NULL, I tried to delete the record in table EntityA.

I expected that the record would be deleted and the field EntityA_id in table EntityB would be automatically set to NULL. Unfortunately I got exception: The DELETE statement conflicted with the REFERENCE constraint "FK_EntityAEntityB"

Why does the exception throw if the field with foreign key is set to ALLOW NULL?

4

1 に答える 1

0

外部キーを持つフィールドが ALLOW NULL に設定されている場合、例外がスローされるのはなぜですか?

例外がスローされる理由は、実行しようとしていることがnull 許容列だけでなく、行全体に影響するためです。子テーブルの列を許可するように設定するnullと、その列に値を持たせないことが規定されます。RDBMS で明示的に規定されていない限り、null 許容列は、外部キーのような参照整合性制約とは無関係です。つまり、列固有のルールが設定されているかどうかに関係なく、外部キー ルールが適用されます。また、外部キーの規則により、子テーブルに子がある場合、親行を削除できないことが規定されています。そうすることで、すべての子レコードが孤児になります。私たちは誰も孤児になりたくないのですか?

外部キーが保証するのは、次のように、親テーブルのキー列の有効な値を参照せずに、子テーブルの外部キー列で値が挿入/削除されないことです。逆に、親行を削除することはできません (ただし、ON DELETE句が指定されている場合)、関連するテーブルに子行がある場合。

MSSQL の null 外部キー列のルール(使用していると思います) では、外部キー列に null を含めることが許可されています。そして、それはおそらくこれをやってのけるためにあなたがしなければならないことです. 列の値を に設定してからNULL、削除を試みます。

これとは関係ありませんが、これに興味があるかもしれません

于 2012-11-02T05:19:12.533 に答える