@ledsun blog

無味の味は佳境に入らざればすなわち知れず

RDBMS マスタテーブルの論理削除

マスタテーブルの論理削除ってどっちがいい?

  1. 削除フラグ
  2. 削除テーブルに移動

削除フラグ

  1. マスタテーブルに削除カラムを用意する。型は論理値(か整数型)
  2. 削除カラムの値がtrue(か1)になったら論理削除されたとして扱う
ID IS_DELETE
1 true
2 false

削除テーブルに移動

  1. マスタテーブルとは別に削除テーブルを用意する。カラムはマスタテーブルと同じ
  2. 削除テーブルにマスターテーブルのレコードが入ったら論理削除として扱う
マスタテーブル
ID
2
削除テーブル
ID
1

メリット・デメリット

削除フラグ
  • 検索クエリにいちいちWHERE IS_DELETE = falseが入って面倒*1
  • データの復活が簡単
  • マスタテーブルがだんだん大きくなるので追加削除が多いときはおすすめできない*2
削除テーブル
  • 削除クエリがSELECT-INSERTとDELETEになって面倒*3
  • 削除されたキーが再び使われる可能性がある*4

*1:ビューを作れば回避できる

*2:年間1万ユーザ増えたり減ったりするなら問題

*3:トリガーを作れば回避できる

*4:シーケンスでキーを生成していたり、外部キー制約があったりすれば問題ない