このテーブル関係で「複数のカスケードパス」が表示されるのはなぜですか?


0

私は、データベース内の次の表の関係を持っている:

  Parent 
     / \ 
    Child1  Child2 
     \  /
     GrandChild 

私は子供と孫テーブルの両方に親テーブルカスケードの削除するようにFK関係を作成しようとしています。特定のいずれかの特定の子供に対しては、それは一方または他方の子テーブルの親であるが、同時に両方ではない。

私はFKリレーションシップにON DELETE CASCADEを追加しようとしていますが、それは2人の子供の1つの「側」に追加しても問題ありません(Parent-Child1-GrandChildはカスケード削除に適しています)。しかし、関係SQLのChild2 "側"にカスケード削除を追加するとすぐに、FKが複数のカスケードパスを引き起こすことがわかります。複数のカスケード・パスは、複数のFKがSAME表を示すときにのみ適用されるという印象を受けました。この場合複数のカスケードパスエラーが発生するのはなぜですか?

PSこの時点でのテーブルの関係は変更するのが非常に難しいので、私のテーブル構造を変更するように指示するだけでは役に立ちません。ありがとうございます。

4

親レコードを削除すると、すべての削除可能なGrandChildレコードにつながるパスが2つあることを意味します。

修正:FKのON DELETE CASCADEオプションを削除し、ChildXテーブルに対してINSTEAD OF DELETEトリガーを作成し、すべての孫レコードを削除してから、childXレコード自体を削除します。