データベースのデータ削除には物理削除と論理削除という考え方があります。
今回の説明に利用するテーブル構造は以下の通りです。
テーブル名: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文に条件を付けるということで削除という状態を表現します。
まとめ
物理削除とは、データベースからデータ自体を削除してしまうことをいいます。
論理削除とは、データベースからデータ削除自体は行わず、データベースを扱うシステムのルールにより削除されていないと判断されるデータのみ対象とすることで削除を実現する考え方です。こういうのをシステム開発の現場では方式などと言います。