1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

仕事で使っている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. いっそ「戻す必要があるかもしれない」という概念は無いとして、物理削除してしまう
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?