はじめに
システム上のデータの管理において重要な「削除」機能。
一言に削除機能といっても
・ 論理削除
・ 物理削除
の二つがある。
それぞれの内容、メリット、デメリットをまとめておく。
論理削除
文字通り「論理的な」削除を示す。
表面上はデータを削除したように処理するが、データそのものは残っている状態。
下図の例は、バックエンドのデータ項目に「Delete」を追加しフラグを立てることで
フロントへのレスポンスにデータを含めないという処理を行っている。
論理削除=非表示処理、と認識できる。
論理削除のメリット
データを消さない、つまり元の状態に戻すことができる!これに尽きる。
例えば、アプリケーションの仕様が途中で変わり、削除済みデータが必要になったとする。
そんな場合でも、フラグを修正するだけで過去の削除データを簡単に復元することができる。
論理削除のデメリット
データを消さない、つまり延々とデータが蓄積されていく。
軽量データなら大きな影響はないかもしれないが、塵も積もればなんとやら。
気付いたら大量のデータが蓄積され、ローディングなどの挙動に影響する場合もある。
物理削除
データを抹消する「物理的な」削除を示す。一般的に削除と言ったらこちらだろう。
論理削除とは異なり、データそのものを消去する。
下図の例は先述した論理削除の構成と同じだが、削除により完全にデータが消え
バックエンドにもデータが残っていない状態になっている。
物理削除=廃棄処理、と例えられるだろう。
物理削除のメリット
不要なデータが蓄積せず、コードを単純化できる。
文字通りデータが消去されるので、論理削除とは異なりデータの蓄積はされない。
データそのものがないのだから、ロジックを間違えて表示されたりすることもない。
不要なデータがないので、データとロジックの最適化がされている状態になる。
物理削除のデメリット
削除したデータの復旧はできない。
当然だが、後で必要になっても復旧させることはできない。
重要なデータほど、物理削除は慎重に行うべきだろう。
使い分けとベストプラクティス
以上、論理削除と物理削除について記述した。
簡単にまとめると
・論理削除=非表示にしてデータを残す
・物理削除=データの完全消去
と言えるだろう。
どちらも一長一短で、場面によって使い分け、もしくは組み合わせることが必要になる。
個人的に考えるベストプラクティスとしては
基本は論理削除とし、一定期間使用しなかった削除データに対し物理削除を行う
という二段構えだ。
多少の手間はかかるかもしれないが、安定したデータ管理ができると考える。
最後に
データを管理する上で避けられない「削除」ではあるが、その削除には種類があり、
性質をしっかり把握し適切に用いることで、より安全なデータ管理を図れることがわかった。
今後はシステムのアーキテクトを考慮し、より適切な削除方法を組み込んでいくこととする。