決定的な状況私は来ました。 RDBMS、特にSQL Serverに関連しています。リレーションシップなし/リレーションシップとのデータベース設計外部キーを使用する必要がありますか?
私の思うように、どのデータベースにも複数のテーブルがあり、これらのテーブルはクエリ時に直接キーまたはジョインを介して相互に接続されています。今私の理解ごとに、データベースの設計には2つの選択肢があります。
1 - RELATIONSなし(外部キーなし)
私はテーブル間の外部キー関係を提供していない場合は、私が参照整合性を持っていないかもしれないが、私はPKと親レコードを削除し、まだすることができます子供の記録をそのまま残す。そして私が親でPKレコードを再作成すると、再び参加時にその子供を参照し始めます。それが1つの利点です。しかし、私はすべてのテーブルレコードを更新する必要があります私は親PKレコードを更新する場合。それは欠点です。
2 - (外部キーを持つ)RELATIONS
WITH私はテーブル間に確立FKSを持っている場合、私は、更新のための余分なコーディングを行う必要があり、それらのレコードを削除しないでください。しかし、問題は、私がPKレコードまたは親レコードだけを削除したいときです。そこで、各テーブルにIsActive
カラムを提供する必要があります。次に、使用するすべてのクエリでIsActive
カラムを検索する必要があります。そしてそれは非常に厄介で長い。だから、完璧ではない。
このジレンマの中で、私のデータベース設計パターンをどうすべきか教えてください。
FK制約で「ON DELETE SET NULL」を使用できます(https://technet.microsoft.com/en-us/library/ms186973(v=sql.105).aspxを参照)。子供の周りのレコード。 FK列に親レコードがなくても有用な自然キーが保持されている場合、真の親子関係はなく、FK制約が必要かどうか再考する必要があります。 JOINテーブルにはFK制約は必要ありません。 – reaanb