Вопрос с собеседования · Базы данных

Чем опасно объявление внешнего ключа с ON DELETE CASCADE?

MiddleМоделирование данныхSQL
Ещё спрашивают так:
  • Когда использовать ON DELETE CASCADE?
Коротко

Удаление одной строки может рекурсивно удалить тысячи связанных строк по цепочке внешних ключей — и это не видно из кода приложения.

  • Уместно для настоящих частей целого: позиции заказа при удалении черновика
  • Для важных данных — RESTRICT и явное удаление в коде, мягкое удаление
  • Каскад по большой таблице — долгие блокировки и большой WAL

А ещё Без индекса на ссылающейся колонке каскад ещё и медленный

Подробно

Каскад удобен для строго подчинённых данных, которые вне владельца не имеют смысла — например, позиции заказа. Но для сущностей, на которые ссылаются другие части системы, он превращается в мину: удаление клиента уносит заказы, платежи и историю, а восстановление возможно только из резервной копии. Дополнительно каскадное удаление берёт блокировки на все затронутые строки и способно надолго заблокировать таблицы. Более безопасные варианты — ON DELETE RESTRICT, чтобы удаление падало с ошибкой, или ON DELETE SET NULL, а также мягкое удаление флагом. И отдельная практическая деталь: по колонкам внешних ключей стоит держать индексы, иначе проверка ссылочной целостности при удалении родителя выльется в полное сканирование.

Что хотят услышать

  • Риск неочевидного массового удаления.
  • Где каскад уместен, где нет.
  • Альтернативы: RESTRICT, мягкое удаление.

Частые ошибки

  • Ставить каскад на связи между независимыми сущностями.
  • Забывать индекс на колонке внешнего ключа.

Проверьте себя

Один верный вариант. Подумайте, потом откройте ответ.

Показать варианты и ответ
  • ✓Одно удаление может незаметно снести большое дерево связанных строк
  • ✗Каскад работает только в пределах одной таблицы
  • ✗Каскад запрещает создание индексов по внешнему ключу
  • ✗Каскад отключает проверку ссылочной целостности для дочерних таблиц на время удаления

Что спросят дальше

  • Почему индекс на внешнем ключе важен при удалении родителя?
  • Когда мягкое удаление лучше физического?

Разбор темы

Связанные вопросы

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования