Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

仕事で使っている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. いっそ「戻す必要があるかもしれない」という概念は無いとして、物理削除してしまう
Qutjl
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした