Glossary

Soft Delete

Soft delete is a "soft" deletion pattern: a record is not physically removed from the database but is marked as deleted via a deleted_at field (timestamp). All queries automatically filter out "deleted" records.

Why use it

Implementation

-- Migration: add the field
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMP NULL DEFAULT NULL;

-- "Delete"
UPDATE users SET deleted_at = NOW() WHERE id = 42;

-- Queries ignore "deleted" records
SELECT * FROM users WHERE deleted_at IS NULL;

Downsides