ソフトデリートとデータアーカイブ
メニューを表示するにはスワイプしてください
ソフトデリートは、データベース設計における戦略の一つで、レコードを削除する際に物理的にテーブルから削除するのではなく、特別なカラム(多くの場合はタイムスタンプやブール型フラグ)を使って削除済みとしてマークする方法です。この手法は、データを完全に削除するハードデリートよりも好まれることが多く、履歴情報の保持、データの復元、関連レコードの参照整合性の維持が可能となります。例えば、プロジェクトを削除しても、その関連タスクや監査履歴を保持したい場合、ソフトデリートを利用することで貴重なコンテキストを失うことなく対応できます。
-- Add a 'deleted_at' column to the 'projects' table for soft deletes
ALTER TABLE projects
ADD COLUMN deleted_at TIMESTAMP NULL;
deleted_at カラムが追加されると、このカラムが NULL かタイムスタンプを持つかで、アクティブなレコードとソフトデリートされたレコードを区別できます。アクティブなレコードは deleted_at が NULL、削除済みレコードは削除日時のタイムスタンプが記録されます。このパターンはアーカイブにも活用でき、古いレコードやソフトデリートされたレコードを定期的に別のアーカイブテーブルへ移動することで、メインテーブルの煩雑さを減らし、クエリのパフォーマンス向上にもつながります。アーカイブはデータライフサイクル管理やコンプライアンス要件にも有効です。
-- Query only active (not soft-deleted) projects
SELECT *
FROM projects
WHERE deleted_at IS NULL;
-- Query only soft-deleted projects
SELECT *
FROM projects
WHERE deleted_at IS NOT NULL;
-- Archive projects soft-deleted more than 1 year ago
INSERT INTO projects_archive
SELECT *
FROM projects
WHERE deleted_at IS NOT NULL
AND deleted_at < NOW() - INTERVAL '1 year';
-- Remove archived projects from main table
DELETE FROM projects
WHERE deleted_at IS NOT NULL
AND deleted_at < NOW() - INTERVAL '1 year';
1. ソフトデリートとは何ですか?
2. テーブルでソフトデリートを実装する方法はどれですか?
3. ソフトデリートをハードデリートよりも使用する利点は何ですか?
すべて明確でしたか?
フィードバックありがとうございます!
セクション 1. 章 12
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 1. 章 12