プログラマのメモ帳

【DB】物理削除と論理削除【考え方】

データベースのデータ削除には物理削除と論理削除という考え方があります。

今回の説明に利用するテーブル構造は以下の通りです。

テーブル名:USER

No. カラム名 データ型 主キー
1 ID NUMERIC
2 NAME VARCHAR
3 TEAM VARCHAR
4 ENABLED BOOLEAN

登録されているデータは以下の通りです。

※データについては、趣味全開です。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
2 西住みほ あんこう TRUE
3 武部沙織 あんこう TRUE

物理削除とは

以下のようにSQL文の「DELETE」構文を実行することを意味します。テーブルから物理的にデータが削除されます。

DELETE FROM USER
WHERE ID = 1

上記SQL文を発行した場合、以下のようになります。

ID NAME TEAM ENABLED
2 西住みほ あんこう TRUE
3 武部沙織 あんこう TRUE

このようにテーブルからデータが消えてしまう状態を「物理削除」と言っております。

論理削除とは

物理削除とは違い、主に以下のようなSQL文の「UPDATE」構文を実行して論理削除の状態を実現します。

UPDATE USER
SET ENABLED = FALSE
WHERE ID = 1

上記SQL文を発行した場合、以下のようになります。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
2 西住みほ あんこう FALSE
3 武部沙織 あんこう TRUE

このようにデータは実際には削除されずに残っている状態になります。この状態では削除されているとは言えません。

論理削除には、「削除」という状態の考え方が少し違います。データを削除するのではなくデータベースを利用しているプログラムから見て対象外とする意味があります。

論理削除という状態を実現するためには、プログラムからデータ取得する条件に必ず「ENABLED」が「TRUE」であるルールが必要になります。これはシステム全体で決められたルールとして定義されていることにより実現できると言えます。

削除されていないデータをすべて参照する場合のSQL文は以下の通りとなります。

SELECT
  ID,
  NAME,
  TEAM,
  ENABLED
FROM
  USER
WHERE ENABLED = TRUE

上記SQLを実行すると以下のデータが取得できます。

ID NAME TEAM ENABLED
1 角谷杏 カメさん TRUE
3 武部沙織 あんこう TRUE

このように、データ取得SQL文に条件を付けるということで削除という状態を表現します。

まとめ

物理削除とは、データベースからデータ自体を削除してしまうことをいいます。

論理削除とは、データベースからデータ削除自体は行わず、データベースを扱うシステムのルールにより削除されていないと判断されるデータのみ対象とすることで削除を実現する考え方です。こういうのをシステム開発の現場では方式などと言います。