0

私は2つのテーブルを持っています。親と子のテーブル。親レコードを削除しても、子レコードは削除されません。したがって、ON Delete カスケードは使用しません。また、参照されている子レコードがまだある場合、親レコードを削除できないため、外部キーもまったく使用したくありません。関連する親が存在する場合にのみ子が存在できるため、オプションの関係を持つために FKey を null 可能にすることもオプションではありません。

OK FKey は完全に削除されました。私のエンティティ関係図では、これら 2 つのテーブル間に関係はありません。しかし、そうではありません。これは、6 か月後に図を見ると誤解を招く可能性があります。

あなたは今何をしますか?

4

2 に答える 2

1

子レコードが存在する場合は、親レコードを削除することはお勧めできません。代わりにis_Activeフラグを使用してソフト削除し、履歴情報のレポート用にレコードをそこに残すことでデータの整合性を維持する方がよいかどうかを検討できます。

于 2012-07-09T19:20:48.203 に答える
0

子行を削除せずに親行を削除する場合があると仮定すると (フラグを立てるだけでなく)、2 つのオプションがあるように見えます。

  1. 親行を削除するときは、子テーブルの親のキーを NULL にします。
  2. 親行を削除するときは、親のキーを子テーブルに保持してください。

最初のケースでは、外部キーを使用しON DELETE SET NULLてそれを行います。(dbms がその制約をサポートしていると仮定します。)

2 番目のケースでは、外部キー制約を使用しません。

null 非許容の外部キーの要件は意味がありません。一方では、関連する親が存在する場合にのみ子が存在できると言います。一方、子を削除せずに親を削除したいとします。これらの 2 つの要件は、うまく連携できません。

于 2012-07-09T20:24:48.847 に答える