Цепная реакция: почему ON DELETE CASCADE запрещают на проде В… — SQL Academy: всё о реляционных БД и SQL — TG.ME

💣 Цепная реакция: почему ON DELETE CASCADE запрещают на проде

В туториалах эту фичу хвалят: удалил пользователя, а база сама зачистила его заказы. На практике это мина, которая может незаметно стереть половину данных.

⚠️ В чем главная опасность
🔹 Невидимая угроза. Одна неточность в запросе:
DELETE FROM users WHERE status = 'banned';

И каскад автоматически стирает связанные платежи, историю и профили.
🔹 Тишина в логах. Приложение даже не узнает, что база удалила еще сотни строк в других таблицах. Восстановить хронологию ошибки будет очень сложно.
🔹 Блокировки. Удаление одной строки тянет за собой скрытые проверки в десятках связанных таблиц, замедляя остальные операции.

🚀 Как делают правильно
🔸 Явное удаление. Сначала код приложения отдельными запросами удаляет зависимости, пишет подробные логи, и только потом удаляет самого пользователя.
🔸 Мягкое удаление (Soft Delete). Вместо DELETE строке просто меняют статус на удаленную: is_deleted = true.
🔸 Защита от ошибки. Внешние ключи настраивают с ON DELETE RESTRICT. База физически не даст удалить родительскую строку, пока существуют дочерние.

💡 Удобство автоматической зачистки не окупает риск потерять данные без следа — управляй удалением явно.
👍10❤6👌2
July 13, 2026 4K 2 14