削除フラグ

  • データテーブルを定義する際よく見かける項目、「削除フラグ」。
  • 例えば、0なら有効レコード、1なら削除レコードとします。

マスタテーブルの場合

  • 得意先マスタなら「取引終了」みたいな意味合いでしょうか。
  • その得意先については、今後新たな取引データを発生させないように制御できて、でも過去の取引データを参照する場合は必要、のように使う場面が考えられます。

トランザクションテーブルの場合

  • では、取引データはどうでしょうか。たとえば、売上データを削除する場合、誤入力データを抹消するというケースが考えられます。
  • これも「削除フラグ」を1にして、保存しておく必要があるのでしょうか。
  • 私は不要と思います。二度と参照することはないはずですし、売上データを集計したりする場面で常に“削除フラグ=0”的な条件を記述することになります。
  • 当然、削除データが含まれる場合を想定したテストも必要になるでしょう。

DELETEしてしまう

  • こういう場合はやっぱりDELETEがいいのではないかと思うのです。((DBの実ファイルの分断化などの問題はあるかもしれませんが))
  • どうしてもデータを抹消するのに抵抗がある場合、売上データと同じカラムのテーブルを別に作成しておいて、そちらに“移動”するのもいいのではないかと思います。
  • 万が一抹消データを参照したい場合でもUNION ALLすればよさそうです。

facebook slideshare rubygems github qiita