[解決済み] 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 カラムであるキーでカスケードアップデートを使用する。
- カスケードアップデートは、一意性制約と組み合わせて使用するのが最適です。
カスケード接続を使用する場合
- 操作のカスケードを許可する前に、ユーザーから特別に強い確認を返したい場合がありますが、それはアプリケーションに依存します。
- カスケード接続は、外部キーの設定を誤るとトラブルになることがあります。 しかし、それを正しく行えば問題ないはずです。
- カスケードを完全に理解する前に使用するのは賢明ではありません。 しかし、便利な機能であるため、時間をかけて理解する価値はあります。
関連
-
[解決済み] 分散型トランザクションを開始できない
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerにおけるLEFT JOINとLEFT OUTER JOINの比較
-
[解決済み] SQL Server にテーブルが存在するかどうかを確認する
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み] SQL ServerでINNER JOINを使用して削除するにはどうすればよいですか?
-
[解決済み】外部キー制約。ON UPDATEとON DELETEを使用する場合
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 管理者ユーザーで有効なxp_cmdshellへのアクセスが拒否されました。
-
[解決済み] SQL Server 2012 エラー: オブジェクト参照がオブジェクトのインスタンスに設定されていない
-
[解決済み] SQL Server: sys.master_files vs. sys.database_files
-
[解決済み] 階層テーブルの設計
-
[解決済み] データ損失の可能性があるため、スキーマの更新を終了します。
-
[解決済み] テーブルが存在しない場合、"Table 'dbo.Foo' already exists." というエラーはどのように解決すればよいですか?
-
[解決済み] リンクサーバーとしてローカルデータベースを使用する場合、「Deferred prepare could not be completed」エラーが発生する。
-
[解決済み] sp_addrolememberとalter user with default schemaの違いは何ですか...?
-
[解決済み] データセットに対するSSRSクエリの実行に失敗しました
-
[解決済み] SQL Serverで文字列からすべてのスペースを削除する