Если вы работаете в системе с множеством разных модулей в разных версиях, это может быть очень полезно, если каскадные удаленные элементы являются частью / принадлежат владельцу ПК. В противном случае всем модулям потребовались бы немедленные исправления для очистки их зависимых элементов перед удалением владельца PK, либо отношение внешнего ключа было бы полностью опущено, что могло бы привести к образованию тонны мусора в системе, если очистка не была выполнена правильно.
Я только что ввел каскадное удаление для новой таблицы пересечений между двумя уже существующими таблицами (пересечение только для удаления), после того, как каскадное удаление было отброшено в течение довольно долгого времени. Это также не так уж плохо, если данные будут потеряны.
Однако в таблицах списков, похожих на перечисление, это плохо: кто-то удаляет запись 13 - желтый из таблицы «colors», и все желтые элементы в базе данных удаляются. Кроме того, они иногда обновляются способом delete-all-insert-all, что приводит к полной пропущенной ссылочной целостности. Конечно, это неправильно, но как вы измените сложное программное обеспечение, работающее в течение многих лет, когда внедрение истинной ссылочной целостности может привести к неожиданным побочным эффектам?
Другая проблема заключается в том, что исходные значения внешнего ключа должны сохраняться даже после удаления первичного ключа. Можно создать столбец-захоронение и опцию ON DELETE SET NULL для исходного FK, но для этого снова требуются триггеры или специальный код для сохранения избыточного (кроме после удаления PK) значения ключа.