2016-05-25 2 views
0

私は非アクティブな行の長所や短所、またはソフト削除の言葉を研究していました。私は両方の面で大きな議論を見つけました。しかし、私は自分のデータベース設計でこの手法を使うことに決めました。データベース内の非アクティブまたはソフト削除されたレコードを管理する方法

「私はFKによってリンクされた関係データをどのように扱うべきですか?」という質問で停止しました。

大文字小文字を非アクティブに更新します。

「T2」のIDを更新すると、「T3」のリレーショナルデータを非アクティブに更新する必要がありますか?

だから、アップデートが 'T1'の行に影響し、データベースがより複雑になるのはどうですか?

ソフト削除されたレコードのデータ管理はどのようになりますか?

オプション1

すべてのリレーショナルデータを更新して管理する必要がありますか?

OR

オプション2

は、私が選択クエリでそれを管理する必要がありますか?

'オプション1'は非常に高価なクエリが必要ですか?

深みのある最初の検索で解決する必要のある迷路のようなものです。
enter image description here

ありがとうございました。私は私の質問が質問品質のあるレベルに達するのに役立つことを願っています。

+0

私は本当にあなたがやろうとしていることを理解していません。'T2'でいくつかのIDを更新すると、なぜリレーショナルデータが 'T3'で非アクティブに更新されるべきですか?とにかくこれらの2つの操作は何ですか? –

+0

あなたの早い再生のおかげで、申し訳ありませんが私の質問が十分ではない場合、私の英語は私の母国語ではありません。とにかく、 私はリレーショナルデータを無効にするために二重の操作を行う必要がありますか、または私はちょうどそれをselect文で管理すべきですか? –

+0

これは私を理解し、あなたを助けることができません... –

答えて

1

あなたのやりたいことによって異なります。 order、orderitem、productというテーブルがあると仮定します。注文が削除されると、削除されたフラグが取得され、データベースに残ります。したがって、すべての注文項目も削除されますが、もちろん商品は削除されません。ビジネスロジックはオブジェクト間の関係を認識する必要があります。

これは、注文アイテムが削除されたときに何をしたいかによって異なります。必ずしもソフト削除する必要はありません。注文のみです。それでもアイテムをソフト削除したい場合は、削除済みのフラグを追加する必要があります。

製品が削除されると、それを参照する有効な注文アイテムがないことを確認する必要があります。繰り返しますが、このケースをどのように処理するかによって異なります。あなたは通常それをブロックしたい。

1

もし私があなただったら、私はオプション2に行きました。レコードを読む必要がある頻度と比較して、テーブル内のレコードを削除する頻度を考えてみましょう。間違いなく読み取り頻度はもっと高くなければなりません。 これは、WHERE句を使用してSELECTクエリで簡単に管理できます。 このテクニックは、C#でlinq-to-sqlまたはEFコードを記述する場合にも非常に便利です。

1

テーブルが第2正規形(2NF)に準拠している場合、T2のレコードを非アクティブ(またはソフト削除)としてマークすると、T3の子レコードを非アクティブとしてマークする必要はありません。 2NFに従って、T2の非アクティブ属性はT2にのみ適用され、T3には適用されません。

+0

個人的には、私はいつもEFとLinq-to-SQLの代わりにT-SQLを使用します。私はそれが私の新しい検索タイトルだろうと思う。負荷バランスに関して。とにかく、あなたの提案に感謝します。 –

関連する問題