データは物理的にも論理的にも削除すべきではないのか?

InfoQ Japan に昨日 (9/13) づけでデータの削除は非推奨というニュースが公開された。内容をまとめると

  • Oren Eini 氏曰く : 論理削除はデータが間違いを含んだ状態(例えば顧客エンティティが論理削除された注文エンティティを保持する)になりやすいよね。論理削除はやめた方がいいよ。
  • じゃあ、物理削除することにして、整合性を保つためにカスケード削除すればいいか。
  • Udi Dahan 氏曰く : いやいや、現実世界ではカスケード削除されないよ(カタログに載っている商品を「削除」しても商品自体への注文は一緒に消えてなくなることなんてない)。そもそも、現実世界で行われることは「削除」の一言では表しきれないじゃない。注文は削除じゃなくてキャンセルされるものだし、従業員は解雇とか退職、仕事は完了とか取り消しだよね。単純な IsDeleted フラグじゃなくて、有効、中止、キャンセル、廃止予定のような状態を持たせるべきじゃないかな。

つまり、物理削除も論理削除もしないほうがいいんじゃない?という話だ。

 

今の仕事について以来、関わったシステムはほとんど論理削除で設計されていたので、業務システムは論理削除が普通なんだと思って受け入れていたが、言われてみれば確かにそうかとも思う。データベースが、現実世界の情報をモデル化してシステム上で再現したものと考えれば、データの「削除」についても現実世界に即したものにすべきではないか。

僕の周りは論理削除が多いが、実際のところどうなのだろう? 現実に論理削除が多いのは、単純に Udi Dahan 氏のような視点がなかっただけなのか、それとも論理削除にメリットがあるのか?

Comments

Popular posts from this blog

TFS: 別PCでのチェックアウトを取り消す

WPF の RichTextBox に文字列を設定する&取り出す

WPFアプリにアニメーションGIFを表示させる