階層に3つのテーブルがあるとしましょう。
TableA -> TableB -> TableC
TableC
と外部キー関係がありTableB
、とTableB
外部キー関係がありTableA
ます。
のレコードをTableA
削除すると、階層を介してカスケード削除する必要があります。使用ON DELETE CASCADE
すると問題なく動作します。
INSTEAD OF
ただし、にトリガーを設定する必要があるとしましょうTableC
。私の理解でINSTEAD OF
は、削除カスケードが行われているテーブルにトリガーを設定することはできません。MSDNから取得:
INSTEAD OFトリガーの場合、DELETEオプションは、DELETEのカスケードアクションを指定する参照関係を持つテーブルでは許可されていません。
カスケード削除をオフTableB->TableC
にする必要がある場合は、INSTEAD OF
トリガーを使用して参照整合性を適用する必要があります。その後、。で同じ問題が発生しTableB->TableA
ます。これは単純な例ですが、カスケードパスがはるかに大きいことを想像してください。長いカスケードパス全体で雪だるま式になりやすいようです。
では、このシナリオに対処するためのベストプラクティスは何ですか?