web-dev-qa-db-ja.com

CASCADE DELETEルールを使用する必要がありますか?

Duplicate of: When/Why to use Cascading in SQL Server?

私はいつも怖くてDELETE CASCADEを使用できませんでしたが、自信が持てるようになると(怠惰:D)、それがどれほどひどいものになるかを考えています。それを使用するのがベストプラクティスなのか、それとも避けてクリーンアップする必要がありますか外部キーなどは昔ながらの方法(ストアドプロシージャを使用)ですか?

36
inspite

ON DELETE CASCADEは問題ありませんが、依存する行が実際に削除される行の論理的な拡張である場合のみです。たとえば、ヘッダーといくつかの行で構成されるこの注文を削除したいので、DELETE ORDERSが関連するORDER_LINESを削除しても問題ありません。一方、DELETE CUSTOMERは関連するORDERSを削除しないでください。ORDERSはそれ自体が重要であり、単なる顧客の属性ではないためです。

これについて考える1つの方法は、DELETE Xを発行し、Yも削除する場合、私は幸せですか、それとも不幸ですか?また、DELETE Xを発行し、「Yが存在するためXを削除できない」と通知された場合、私は保護をうれしく思いますか、それとも不便にイライラしますか?

80
Tony Andrews

(明示的に宣言することにより)削除対象を正確に制御することを好みます。そのため、通常は、ストアドプロシージャを使用して削除し、カスケード削除は使用しません。

12
Galwegian