[外部キーの削除/更新]制約のSET NULLの目的は何ですか?


15

私はおそらく心が狭いですが、外部キー制約を作成して行が更新または削除された場合、子テーブルの列がNULLに設定されるとその接続を失います。

これらの孤立した行を意図的に保持する目的は何ですか?


私はユースケースを探していますが、データベース固有のものではないと思います(ここでは間違っているかもしれません)
デレクダウニー

これのユースケースを見たことがありません
...-a_horse_with_no_name

回答:


13

set null有用であるかどうかはnull、特定のコンテキストで何を意味するかによって決まりますnull。IMOをめぐる混乱と意見はすべて、DBAにとって賢明なアプローチです。

  1. 各ヌル可能フィールドの意味を選択(および文書化)する
  2. 意味が1つだけであることを確認してください

これらのルールを使用して、次のユースケースを検討してください。

  • テーブル「ショップ」があります(例:個々の施設)
  • 「小売店」というテーブルがあります(チェーンなど)
  • 「ショップ」テーブルには、「小売店」のキーを参照するルックアップフィールドがあります
  • null独立したショップ(チェーンの一部ではないショップ)を代表するように定義しました
  • 「小売業者」は、あなたがその店が独立していると考えるポイントまで支店を閉じます

この場合、on delete set null意味があります。これらのビジネスルールをモデル化する方法は他にもありますが、これは最も単純であり、現実の世界で関心のある事実に正確に適合する場合は、完全に大丈夫であることをお勧めします


nullの厳密な意味を持つ良い点、そしてあなたの例では、なぜこれが機能なのかは明らかです。
デレクダウニー

1

私が一般的に考えることができるユースケースのほとんどは、「まあ、私たちは何か違うことをすることができますが、代わりにこれをやりたいと思った」という形式です。

owner会社の問題追跡システムのバグのフィールドを検討してください。Johnが辞めた場合、彼のアカウントが削除されたときに、彼のすべての問題を単純に削除すべきではありません。それでも、一部のデータベースでSET DEFAULTはアクションとして(または同じタスクを実行するトリガーを使用して)許可されており、Nobody従業員を問題のデフォルトの所有者にすることがオプションになる場合があります。またはdisabled、Johnのレコードを削除するのではなく、Johnのフィールドを持つことができます。


3
この場合RESTRICT、何か問題が発生したときに古い従業員を非難する他の理由がない限り、削除を許可しない()と主張します!
デレクダウニー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.