データベースに適切なRIが定義されている場合、データの完全性が損なわれることはありません。関連するすべてのテーブルには宣言的なRIが必要です。つまり、はにはまだ子がありますが、削除することはできません。
また、いくつかの行を時々削除しているコードがあると、それはコーディングが貧弱でテストが貧弱です。この種のアクションは単一のトランザクションでなければなりません。ストアドプロシージャを使用することの提案は、その問題を解決するための優れたアプローチであり、かなり標準的です。
すでに説明したように、カスケードトリガーは、誰かが削除したくない行を削除する危険性があります。特にデータの問題を修正するときに、アプリケーションの外部からデータにアクセスしている人がいると考えてください。誰かが誤って間違った親を削除しようとしたときに、うまくいくRIエラーが発生したとき。彼らが間違った親を誤って削除しようとすると、その親を削除するだけでなく、5つの他のテーブルに20人の子供が削除されます。
また、カスケード削除は非常に隠されています。開発者が親の削除をコーディングしている場合、削除ストアドプロシージャを使用して子を処理する必要があることを知っておく必要があります。開発者に削除を投げさせることよりも、開発者にコードを付けさせずにエラーを取得し、彼のコードを修正すること(または、彼が本当に削除をすべて実行したくないことに気付くこと)が望ましいコードが公開されるまで子どもを殺していることは誰にも分かりません。
IMOでは、私の開発者にアプリケーションについての知識があり、アプリケーションを知らない方が簡単になるようにしたいと考えています。
完全に。偉大な答えとよく置く。データの整合性は常に注目を集めておらず、通常、数年後にはじまり、多くの企業を絞め殺してしまいます。 –
カスケード削除には、手動でデータを削除する際の事故の可能性があるため、いくつかの汚点があるようです。個人的に私はそれに関していくつかの悪い経験をしてきましたが、厳密なデータの完全性を維持することがより安全な方法であることにはまだ同意します。一方、私はまだカスケードの使用を避けようとしています。 –