SQL Server 2005 で、悪名高いエラー メッセージが表示されました。
テーブル YYY に FOREIGN KEY 制約 XXX を導入すると、サイクルまたは複数のカスケード パスが発生する可能性があります。ON DELETE NO ACTION または ON UPDATE NO ACTION を指定するか、他の FOREIGN KEY 制約を変更します。
現在、StackOverflow にはこのエラー メッセージに関するいくつかのトピックがあるため、解決策は既に得られています (私の場合はトリガーを使用する必要があります) が、なぜこのような問題が発生するのかについて興味があります。
私が理解しているように、彼らが回避したいシナリオは基本的に 2 つあります。サイクルと複数のパスです。循環とは、2 つのテーブルが相互にカスケードする外部キーを持つ場所です。OK、サイクルは複数のテーブルにまたがることもできますが、これは基本的なケースであり、分析が容易になります。
複数のパスは、TableA に TableB および TableC への外部キーがあり、TableB にも TableC への外部キーがある場合です。繰り返しますが、これは最低限の基本的なケースです。
これらのテーブルのいずれかでレコードが削除または更新されたときに発生する問題は見当たりません。確かに、どのレコードを更新/削除する必要があるかを確認するために、同じテーブルを複数回クエリする必要があるかもしれませんが、それは本当に問題なのでしょうか? これはパフォーマンスの問題ですか?
他の SO トピックでは、カスケードの使用を「危険」とラベル付けし、「カスケード パスの解決は複雑な問題です」と述べています。なんで?リスクはどこにありますか?問題はどこだ?