階層に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ます。これは単純な例ですが、カスケードパスがはるかに大きいことを想像してください。長いカスケードパス全体で雪だるま式になりやすいようです。
では、このシナリオに対処するためのベストプラクティスは何ですか?