43

複製: SQL Server でカスケードを使用する場合と理由は?

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

4

2 に答える 2

92

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

これについて考える 1 つの方法は、次のとおりです。DELETE X を発行して Y も削除した場合、私は満足するでしょうか、それとも不満足でしょうか? また、DELETE X を発行して、「Y が存在するため X を削除できません」と言われたら、保護されていることを嬉しく思いますか?

于 2008-11-10T17:16:21.847 に答える
13

何を削除するかを (明示的に宣言することによって) 正確に制御したいので、通常はストアド プロシージャを使用して削除し、カスケード削除を使用しません。

于 2008-11-10T16:40:08.737 に答える