web-dev-qa-db-ja.com

複数のカスケードパスを使用できないのはなぜですか?

複数のカスケードパスについて多くの質問がされていることがわかります。例えば:

https://stackoverflow.com/questions/851625/foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths

https://stackoverflow.com/questions/6065501/multiple-cascade-delete-path-in-many-many-relationship-ef-4-1

https://stackoverflow.com/questions/27613117/introducing-foreign-key-constraint-may-cause-cycles-or-multiple-cascade-paths-s

ただし、私が見て理解していることから、manyだけでなくの子レコードを削除してもかまいません=)one関連するマスターレコードの削除の条件。

質問では、SQL Serverがこれを防止することで安全を確保しようとしていると言われていますが、複数のカスケードパスがある場合に問題が発生する可能性があることと、それによって問題が発生しないことsafe

複数のカスケードパスがある場合に問題が発生する可能性のある例を使用して、わかりやすく簡単な言葉で説明していただければ幸いです。

8
Saeed Neamati

この「何がうまくいかないのか」という質問には、MicrosoftまたはSybaseの開発者しか回答できません。同じレコードへのカスケードパスが複数ある場合、コードがそれを複数回削除しようとする可能性があります。削除されるレコードがalreadyが削除された可能性に対処するように構築されていない場合、エラーがスローされる可能性があります。どうやらこの問題は実際に存在する(または存在すると考えられている)ので、修正する代わりに、実装は重複したカスケードパスの定義を防ぐことでそれを回避します。他のDBMSはこの状況で問題がないため、これは明らかにショートカットです。

5
cliffordheath