То, что Даок говорит, правда ... это может быть довольно удобно. С другой стороны, автоматическое выполнение действий в базе данных может быть реальной проблемой, особенно когда речь идет об удалении данных. Вполне возможно, что в будущем кто-то будет рассчитывать на то, что FK обычно предотвращают удаление родителей, когда есть дети, и не осознают, что использование каскада при удалении не только не предотвращает удаление, но и создает огромные объемы данных в десятках другие таблицы исчезают благодаря водопаду каскадных удалений.
@ Комментарий Артура.
Чем чаще «скрытые» вещи происходят в базе данных, тем меньше вероятность того, что кто-либо когда-либо будет хорошо разбираться в происходящем. Триггеры (и это, по сути, триггер) могут привести к тому, что мое простое действие по удалению строки будет иметь самые разные последствия для всей моей базы данных. Я выполняю оператор Delete, и на 17 таблиц влияют каскады триггеров и ограничений, и ни один из них не является очевидным для автора команды. OTOH, если я помещу удаление родителя и всех его потомков в процедуру, то для любого очень легко и ясно увидеть ТОЧНО, что произойдет, когда я выполню команду.
Это никак не связано с тем, насколько хорошо я проектирую базу данных. Все это связано с оперативными проблемами, вызванными триггерами.