Зачем
- Восстановление случайно удалённых данных
- Аудит и compliance: данные хранятся по законодательному требованию
- Сохранение связей: если Order ссылается на удалённого User — запись остаётся
Реализация
-- Миграция: добавить поле
ALTER TABLE users ADD COLUMN deleted_at TIMESTAMP NULL DEFAULT NULL;
-- "Удаление"
UPDATE users SET deleted_at = NOW() WHERE id = 42;
-- Запросы игнорируют "удалённых"
SELECT * FROM users WHERE deleted_at IS NULL;
Недостатки
- Таблица растёт и никогда не очищается — нужна архивация
- Unique constraints: удалённый email может блокировать новый аккаунт
- Более сложные JOIN-ы и запросы