Юрий Белк – Full stack Developer (страница 37)
– CHECK для ограниченных наборов значений (status, role)
– UNIQUE там, где нельзя дублировать (email, membership, label name)
– FOREIGN KEY почти везде, где есть ссылки
9.6.1. Foreign key и поведение при удалении
Варианты:
– ON DELETE RESTRICT – не даём удалить родителя, пока есть дети (часто лучший вариант)
– ON DELETE CASCADE – удаляем детей автоматически (опасно, но иногда удобно)
– ON DELETE SET NULL – “ссылка исчезла, но запись живёт”
Для TaskFlow здравый баланс:
– workspace → проекты: RESTRICT (или soft delete)
– project → tasks: RESTRICT/soft delete
– task → comments: RESTRICT/soft delete
– users в assignee: SET NULL (если пользователь деактивирован, задача остаётся, но без исполнителя)
9.6.2. Почему каскад иногда опасен
CASCADE легко превращается в кнопку “удалить всё случайно”.
Кто-то удалил workspace – исчезли проекты, задачи, комментарии, аудит (если вы не думали), и у вас остались только воспоминания.
9.7. Soft delete vs hard delete: как выбрать без философских войн
Hard delete – физическое удаление строки (DELETE FROM …).
Soft delete – отметка “удалено” (например deleted_at), но строка остаётся.
9.7.1. Когда soft delete – хороший выбор
– для задач и комментариев: полезно восстановление, аудит, разбор конфликтов
– для проектов: “архив” и “удаление” часто путают, лучше мягко
– для labels: чтобы не ломать историю и фильтры
9.7.2. Когда hard delete проще и честнее
– временные таблицы типа idempotency_keys (там вообще TTL)
– логины/сессии/refresh tokens (если вы их храните)
– технические данные, которые не нужны для истории
9.7.3. Цена soft delete
– каждый SELECT должен помнить deleted_at IS NULL
– индексы и запросы усложняются
– нужен механизм “чистки навсегда” (например, удалять soft-deleted старше N дней)
Практика: сделайте “живые данные” дефолтом:
– все основные запросы выбирают только deleted_at IS NULL
– отдельные admin-ручки могут показывать удалённые
9.8. Миграции: почему без них нельзя (и чем отличаются инструменты)
Миграции – это способ изменять схему базы управляемо, а не “я на проде руками поправлю”.
Есть несколько популярных инструментов. Мы сравним их по простым критериям: удобство, контроль, гибкость, и как они чувствуют себя в многоязычной книге.
9.8.1. Flyway
Подход:
– миграции – SQL-файлы с версиями (V1__init.sql, V2__add_tasks.sql)
Плюсы:
– очень простой ментально: SQL – значит SQL
– легко ревьюить
– хорошо подходит для PostgreSQL
Минусы:
– сложнее делать “условные” миграции, но чаще это и не нужно
Конец ознакомительного фрагмента.
Текст предоставлен ООО «Литрес».
Прочитайте эту книгу целиком, купив полную легальную версию на Литрес.
Безопасно оплатить книгу можно банковской картой Visa, MasterCard, Maestro, со счета мобильного телефона, с платежного терминала, в салоне МТС или Связной, через PayPal, WebMoney, Яндекс.Деньги, QIWI Кошелек, бонусными картами или другим удобным Вам способом.