1. ホーム
  2. sql-server

[解決済み] SQL Serverでカスケード接続を使用するタイミングと理由

2022-03-11 14:43:30

質問

SQL Serverで外部キーを設定する場合、どのような状況で削除や更新時にカスケードさせるべきか、またその理由は何でしょうか。

これはおそらく、他のデータベースにも当てはまると思います。

できれば、それぞれのシナリオをうまく使っている人の具体例を一番に求めています。

どのように解決するのですか?

今までのまとめ。

  • カスケードが全く好きでない人もいる。

カスケード削除

  • カスケード削除は、リレーションシップのセマンティクスが排他的である場合、意味を持つことがあります。 の一部です。 という記述があります。 例えば、OrderLineレコードはその親オーダーの一部であり、OrderLineは決して複数のオーダー間で共有されることはない。オーダーが消滅した場合、OrderLine も消滅するはずであり、オーダーのない行は問題である。
  • Cascade Deleteの典型的な例は、SomeObjectとSomeObjectItemsで、対応するメインレコードなしにアイテムレコードが存在することは意味をなさない。
  • あなたは ない 履歴を保存する場合、または削除されたビット列を 1/true に設定するだけの "soft/logical delete" を使用する場合は、Cascade Delete を使用します。

カスケード・アップデート

  • カスケードアップデートは、テーブル間でサロゲートキー(ID/オートインクリメントカラム)ではなく、リアルキーを使用する場合に意味があります。
  • カスケードアップデートの典型的な例は、変更可能な外部キーがある場合です。
  • あなたは ではなく は、Identity/autoincrement カラムであるキーでカスケードアップデートを使用する。
  • カスケードアップデートは、一意性制約と組み合わせて使用するのが最適です。

カスケード接続を使用する場合

  • 操作のカスケードを許可する前に、ユーザーから特別に強い確認を返したい場合がありますが、それはアプリケーションに依存します。
  • カスケード接続は、外部キーの設定を誤るとトラブルになることがあります。 しかし、それを正しく行えば問題ないはずです。
  • カスケードを完全に理解する前に使用するのは賢明ではありません。 しかし、便利な機能であるため、時間をかけて理解する価値はあります。