Ruby
Rails
130
どのような問題がありますか?

この記事は最終更新日から3年以上が経過しています。

投稿日

論理削除と物理削除とは

論理削除とは

実際にはデータを削除せずに、削除されたと見なすフラッグと呼ばれるカラムを設定することでユーザーには削除しているかのように振る舞うことができることをさします。

例えばtweetsテーブルというものがあった時に、
そのテーブルにdeleted_flagというboolean型のカラムを追加しておきます。
この状態のときdeleted_flagカラムのデフォルト値はnullです。
こうすることによって、ユーザーにtweetの削除ボタンが押された時にdeleted_flagに1という値がセットすることで、その削除されたツイートとして扱うことができるのです。

物理削除

実際にSQLでDeleteされることをさし、データベースからも削除されます。そのため復元したり削除されたデータを参照することはできません。

論理削除のメリット

先ほどの例でも伝えたとうり、削除したかのように振る舞うだけなのですぐにデータの復元を実現が可能となります。また物理削除に比べても処理速度が早いことがメリットです。

論理削除のデメリット

・データベースにNUllというデータを作りたくない。(これはどうにかしたら解決可能だとは思いますが)
・where句での絞り込み検索を行うときにフラッグの条件を追加する必要がある。

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
jonson29
この記事は以下の記事からリンクされています
yut85SQLってなに?からリンク
miyuki_samitani論理削除と物理削除の違いからリンク

コメント

リンクをコピー
このコメントを報告

データベースにNUllというデータを作りたくない

default: false にしておけばいいと思います。

Rails で boolean のカラム名に _flag ってつけるの,あまり見ない気がします。単純に deleted でいいかも(?)

それから,boolean でなく,deleted_at: datetime もよく使われるようです。null だったら論理削除されてなくて,非 null だったらその日時に論理削除された,と。

8
どのような問題がありますか?
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
データに関する記事を書こう!
~
130
どのような問題がありますか?
ユーザー登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
ユーザー登録ログイン
ストックするカテゴリー