このトピックに関する同様の 質問がいくつかありますが、実際には役に立ちません。
アイテムが実際には削除されずに隠されている、StackOverflow のようなソフト削除機能を実装したいと考えています。SQL データベースを使用しています。3 つのオプションがあります。
is_deleted
ブールフィールドを追加します。- 利点: シンプル。
- 短所:日付記録がない。
is_deleted = 0
すべてのクエリに a を追加する必要があります。
deleted_date
日付フィールドを追加します。これはNULL
、削除されていない場合に設定されます。- メリット:日付あり。
- 短所: まだクエリが雑然としています。
上記の両方について
- これらの無駄な行がすべてあるため、パフォーマンスにも影響します。それらは引き続きインデックスで維持する必要があります。
deleted
また、削除されていない (大部分の) 行をフェッチする場合、列のインデックスは役に立ちません。全表スキャンが必要です。
もう 1 つのオプションは、削除されたアイテムを保持する別のテーブルを作成することです。
- 利点: 削除されていない行をクエリするときのパフォーマンスが向上します。削除されていない行に対するクエリに条件を追加する必要はありません。インデックスのメンテナンスが容易になります。
- 短所: 複雑さ: 削除と復元の両方にデータ移行が必要です。新しいテーブルが必要です。参照整合性は扱いが難しくなります。
より良いオプションはありますか?