Я знаю, что Microsoft SQL Server и Oracle действительно активно используют хранимые процедуры для всего, что помогает инкапсулировать реляционную архитектуру и создает более процедурный интерфейс для разработчиков программного обеспечения, которые обычно не так легко пишут запросы SQL.
Но тогда половина вашей логики приложения написана на PL / SQL (или T-SQL или что-то еще), а другая половина написана на языке вашего приложения, Java или PHP или C # и т. Д. Администратор базы данных обычно отвечает за кодирование процедуры, и разработчики несут ответственность за все остальное. Никто не имеет видимости и доступа к полной логике приложения. Это приводит к замедлению разработки, тестирования и будущих изменений проекта.
Также инструменты разработки программного обеспечения, как правило, плохо подходят для хранимых процедур. Инструменты и лучшие практики для отладки, контроля версий и тестирования, похоже, отстают на 10-15 лет от уровня техники для языков приложений.
Поэтому я стараюсь держаться подальше от хранимых процедур и триггеров, если это вообще возможно. За исключением некоторых случаев, когда правильно размещенная хранимая процедура может заставить сложную операцию SQL полностью выполняться на сервере, а не перетасовывать данные туда-сюда. Это может быть очень эффективно для устранения узких мест производительности.
Возможно и в другом направлении зайти слишком далеко. Люди, которые предпочитают, чтобы приложение управляло данными, а не метаданными, и использовали такие конструкции, как Entity-Attribute-Value или Polymorphic Associations, попадают в неприятности. Позвольте базе данных управлять этим. Используйте ограничения ссылочной целостности (внешние ключи). Используйте транзакции.