Навіщо
- Відновлення випадково видалених даних
- Аудит і 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-и і запити