論理削除フラグと有効フラグ

  • 1
    いいね
  • 0
    コメント

仕事で使っているDBテーブルに、「論理削除フラグ」「有効フラグ」というカラムが併設されていることが話題に上がったのでメモ。

基本の運用

  1. データの通常時      -> 有効フラグ = 1, 論理削除フラグ = 0
  2. データが無効になった場合 -> 有効フラグ = 0, 論理削除フラグ = 0
  3. データを消したい場合   -> 有効フラグ = 0, 論理削除フラグ = 1

問題点

オペミスなどで、基本の運用の 3. が、有効フラグ = 1, 論理削除フラグ = 1 の場合があるかもしれない。(実際ありそうな気がして怖い)
そうすると下記のSQLに引っかからなくなる。

SQL
SELECT *
FROM table
WHERE enabled = 0 AND deleted = 1

あとは、カラムが増えるし、レコードが減ることもなくも永久的に増えていく。
それに、SQLに必ず条件を書かなければいけない。

解決案

  1. 論理削除フラグと有効フラグを状態を保存するカラムに纏める。0:有効、1:無効、3:削除 のような
  2. 削除するレコードは削除テーブルに移動する
  3. いっそ「戻す必要があるかもしれない」という概念は無いとして、物理削除してしまう