SEの研修中「ろんさく」「ぶっさく」という言葉を耳にしました。なんのこと?と思って調べたらデータベースのデータの削除方法「論理削除」「物理削除」のことだと学びました。
Webアプリやデータベースについて勉強していると、「論理削除」と「物理削除」という言葉が出てくることがあります。どちらも画面上ではデータが消えたように見えるため、最初は違いが分かりにくいかもしれません。しかし、データベースの中で行われている処理は大きく異なります。
簡単に説明すると、次のような違いがあります。
- 論理削除:データを残したまま、削除済みとして扱う
- 物理削除:データベースからデータそのものを消す
この記事では、会員管理システムを例に、論理削除と物理削除の仕組みやメリット・デメリット、使い分けについて解説します。
論理削除と物理削除の違い
| 比較項目 | 論理削除 | 物理削除 |
|---|---|---|
| データベース内のデータ | 残る | 消える |
| 画面上の表示 | 表示しない | 表示できない |
| 復元 | 比較的簡単 | 原則として難しい |
| データ量 | 増えやすい | 減りやすい |
| 主な用途 | 会員情報・取引履歴 | 一時データ・不要なログ |
論理削除とは
論理削除とは、データベースにデータを残したまま、削除済みとして扱う方法です。例えば、次のような会員データがあるとします。
| ID | 名前 | 削除フラグ |
|---|---|---|
| 1 | 田中 | 0 |
| 2 | 佐藤 | 0 |
| 3 | 鈴木 | 0 |
「削除フラグ」は、データが削除されているかを判断するための項目です。
- 0:削除されていない
- 1:削除されている
佐藤さんの会員情報を論理削除すると、次のようになります。
| ID | 名前 | 削除フラグ |
|---|---|---|
| 1 | 田中 | 0 |
| 2 | 佐藤 | 1 |
| 3 | 鈴木 | 0 |
佐藤さんのデータ自体は残っていますが、削除フラグが「1」に変わっています。会員一覧を表示するときは、削除フラグが「0」のデータだけを取得します。そのため、利用者からは佐藤さんのデータが削除されたように見えます。SQLで表すと、次のようなイメージです。
UPDATE users
SET deleted_flag = 1
WHERE id = 2;
削除済みのデータを除いて取得する場合は、次のようにします。
SELECT *
FROM users
WHERE deleted_flag = 0;
削除フラグの代わりに、「削除日時」を保存する方法もあります。
deleted_at = NULL 削除されていない
deleted_at = 2026-07-17 削除されている
削除日時を使えば、削除されたかどうかだけでなく、いつ削除されたのかも確認できます。
論理削除のメリット
論理削除の主なメリットは、データを復元しやすいことです。誤って会員情報を削除してしまっても、削除フラグを「0」に戻せば、再び通常のデータとして扱えます。また、過去の状態を確認できることもメリットです。例えば、退会した会員の注文履歴を確認したい場合、会員情報が残っていれば履歴との関係を追いやすくなります。そのため、次のようなデータには論理削除が向いています。
- 会員情報
- 商品情報
- 取引履歴
論理削除のデメリット
論理削除では、不要になったデータもデータベース内に残り続けます。そのため、長期間運用するとデータ量が増える可能性があります。また、データを取得するときは、削除済みのデータを除外しなければなりません。
WHERE deleted_flag = 0
この条件を付け忘れると、本来表示してはいけない削除済みデータが画面に表示される可能性があります。さらに、利用者から削除を求められた個人情報など、保存し続けることが適切ではないデータもあります。「復元できて便利だから」という理由だけで、すべてのデータを論理削除にするべきではありません。
物理削除とは
物理削除とは、対象のデータをデータベースから直接削除する方法です。先ほどの会員データから佐藤さんを物理削除すると、次のようになります。
| ID | 名前 |
|---|---|
| 1 | 田中 |
| 3 | 鈴木 |
IDが「2」のデータそのものがなくなっています。SQLでは、一般的にDELETE文を使用します。
DELETE FROM users
WHERE id = 2;
一度物理削除したデータは、通常の操作では元に戻せません。復元するには、事前に作成したバックアップなどが必要です。
物理削除のメリット
物理削除のメリットは、不要なデータがデータベース内に残らないことです。論理削除のように、データを取得するたびに削除フラグを確認する必要もありません。データが存在しなければ検索結果に出てこないため、仕組みも比較的シンプルです。次のようなデータでは、物理削除が選ばれることがあります。
- 一時的に作成したデータ
- 保存する必要がなくなったログ
- テスト用データ
- 復元する必要がないデータ
物理削除のデメリット
物理削除の大きなデメリットは、誤って削除した場合に簡単には元へ戻せないことです。例えば、管理者が削除する会員を間違えた場合、バックアップがなければ復元できない可能性があります。また、別のデータとの関係にも注意が必要です。会員情報と注文履歴が関連付けられている場合、会員情報だけを削除すると、注文した人を特定できなくなることがあります。データ同士の関係によっては、データベースの外部キー制約により削除自体が失敗する場合もあります。
論理削除と物理削除の使い分け
論理削除と物理削除のどちらを使うかは、データの役割によって判断します。誤操作に備えたい場合や、履歴として残す必要がある場合は、論理削除が候補になります。反対に、復元する必要がなく、保存する理由もない場合は物理削除が候補になります。実際のシステムでは、最初に論理削除を行い、一定期間が経過したあとに物理削除する方法もあります。例えば、退会直後は復元できるようにデータを残し、保存期間を過ぎたら完全に削除するという流れです。
通常データ
↓
論理削除
↓
一定期間保管
↓
物理削除
この方法なら、誤操作への備えと不要なデータの整理を両立できます。
論理削除を実装するときの注意点
論理削除では、削除済みデータの除外条件を付け忘れないことが重要です。一覧表示だけでなく、検索、集計、CSV出力、管理画面など、データを取得するすべての処理で削除状態を考慮する必要があります。また、メールアドレスや商品コードなどに重複を禁止する設定がある場合も注意が必要です。例えば、退会済みの会員データにメールアドレスが残っていると、同じメールアドレスで再登録できない可能性があります。論理削除されたデータをどのように扱うか、あらかじめ設計しておかなければなりません。
まとめ
論理削除と物理削除の違いは、データベース内にデータを残すかどうかです。
- 論理削除:データを残したまま、削除済みとして扱う
- 物理削除:データベースからデータそのものを消す
論理削除は、誤って削除したデータを復元しやすく、過去の履歴も確認できます。一方で、削除済みデータを除外する処理が必要になり、データ量も増えやすくなります。
物理削除は仕組みがシンプルで、不要なデータを残さずに済みます。しかし、削除後の復元が難しく、関連するデータへの影響も考えなければなりません。
どちらか一方が常に正しいわけではありません。「復元する可能性があるか」「履歴として必要か」「完全に消す必要があるか」を考え、データの目的に合った削除方法を選ぶことが大切です。


コメント