2

以下はシナリオです

  • Table1( Id, Name)

  • Table2( Id, Name1, Name2, Type)

    • FK1:とのName1参照Table1.NameOn delete cascade
    • FK2:とのName2参照Table1.NameOn delete cascade

FK2以下のエラーをスローします

エラー:

テーブル Table2 に FOREIGN KEY 制約 FK2 を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。

しかし、私のシナリオでは、エンティティが削除されているかどうかにName1関係なくName2、対応するエントリを削除するTable2必要があります。

これがどのような問題を引き起こす可能性があるかを理解するのを手伝ってください。

4

1 に答える 1

2

FK2 ではサイクルは発生しませんが、複数のカスケード パスが発生します。テーブル 2 からレコードが削除されると、テーブル 1 からの行が 2 回削除されます。カスケードのマークが付けられた削除を持つ各外部キーに対して 1 回です。これは設計上許可されていません。あなたが尋ねているような質問はここで答えられました

「単一の DELETE または UPDATE によってトリガーされる一連のカスケード参照アクションは、循環参照を含まないツリーを形成する必要があります。テーブルは、DELETE または UPDATE の結果として生じるすべてのカスケード参照アクションのリストに複数回出現することはできません。また、カスケード参照アクションのツリーには、指定されたテーブルへの複数のパスがあってはなりません。ツリーの分岐は、NO ACTION が指定されているか、デフォルトであるテーブルに遭遇すると終了します。MSDN ライブラリから取得

于 2013-05-17T19:01:19.230 に答える