Чем опасно объявление внешнего ключа с ON DELETE CASCADE?
- Когда использовать ON DELETE CASCADE?
Удаление одной строки может рекурсивно удалить тысячи связанных строк по цепочке внешних ключей — и это не видно из кода приложения.
- Уместно для настоящих частей целого: позиции заказа при удалении черновика
- Для важных данных — RESTRICT и явное удаление в коде, мягкое удаление
- Каскад по большой таблице — долгие блокировки и большой WAL
А ещё Без индекса на ссылающейся колонке каскад ещё и медленный
Подробно
Каскад удобен для строго подчинённых данных, которые вне владельца не имеют смысла — например, позиции заказа. Но для сущностей, на которые ссылаются другие части системы, он превращается в мину: удаление клиента уносит заказы, платежи и историю, а восстановление возможно только из резервной копии. Дополнительно каскадное удаление берёт блокировки на все затронутые строки и способно надолго заблокировать таблицы. Более безопасные варианты — ON DELETE RESTRICT, чтобы удаление падало с ошибкой, или ON DELETE SET NULL, а также мягкое удаление флагом. И отдельная практическая деталь: по колонкам внешних ключей стоит держать индексы, иначе проверка ссылочной целостности при удалении родителя выльется в полное сканирование.
Что хотят услышать
- Риск неочевидного массового удаления.
- Где каскад уместен, где нет.
- Альтернативы: RESTRICT, мягкое удаление.
Частые ошибки
- Ставить каскад на связи между независимыми сущностями.
- Забывать индекс на колонке внешнего ключа.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✓Одно удаление может незаметно снести большое дерево связанных строк
- ✗Каскад работает только в пределах одной таблицы
- ✗Каскад запрещает создание индексов по внешнему ключу
- ✗Каскад отключает проверку ссылочной целостности для дочерних таблиц на время удаления
Что спросят дальше
- Почему индекс на внешнем ключе важен при удалении родителя?
- Когда мягкое удаление лучше физического?
Разбор темы
- Моделирование данных и целостность
Ключи и constraints, нормальные формы простыми словами, осознанная денормализация и каскадные действия.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.