Выдержка из "Application Architecture Guide":
Основное преимущество хранимых процедур в том, что они обеспечивают уровень абстракции для базы данных, а это минимизирует зависимость кода приложения от изменений схемы базы данных. Также упрощается реализация и управление безопасностью, поскольку можно ограничить доступ ко всему, кроме хранимой процедуры, и использовать механизмы безопасности, обеспечивающие детализированную защиту и поддерживаемые большинством баз данных (хотя не забывайте, что это может помешать использовать преимущества пула подключений).
Основное преимущество динамических SQL-выражений в том, что зачастую они считаются более гибкими, чем хранимые процедуры, и могут обеспечить более быструю обработку. Многие инфраструктуры O/RM самостоятельно генерируют динамические запросы, существенно сокращая объем кода, который должен быть написан разработчиками.
Выбирая между хранимыми процедурами и динамическим SQL, руководствуйтесь следующими рекомендациями:
- Для небольшого приложения с единственным клиентом и несколькими бизнес-правилами динамический SQL часто является лучшим выбором.
- Для большого приложения с множеством клиентов продумайте, как обеспечить необходимую абстракцию. Примите решение, где эта абстракция должна находиться: в базе данных в форме хранимых процедур или в слое доступа к данным приложения в форме шаблонов доступа к данным или продуктов O/RM.
- Хранимые процедуры позволяют осуществлять операции с использованием большого количества данных ближе к данным, что может улучшить производительность.
- Использование хранимых процедур для доступа к базе данных позволит максимально сократить зависимость кода приложения от изменений схемы базы данных. Это поможет изолировать и максимально сократить количество изменений в коде приложения при нормализации или оптимизации схемы. Изменения во входных и выходных параметрах хранимой процедуры могут влиять на код приложения, но часто эти изменения можно изолировать в отдельных компонентах, выполняющих доступ к хранимой процедуре. Изолировать и максимально сократить изменения в коде приложения при обновлении схемы помогут и инфраструктуры O/RM.
- Принимая решение об использовании динамических SQL-запросов необходимо понимать, какое влияние будут оказывать изменения в схемах базы данных на приложение. Поэтому следует реализовывать слой доступа к данным таким образом, чтобы он обеспечивал отделение бизнес-компонентов от выполнения запросов базы данных. Такое отделение помогут реализовать такие шаблоны как Query Object и Repository. O/RM-инструменты позволяют полностью отделить бизнес-компоненты от выполнения запросов к базе данных.
- Учтите квалификацию группы, которая будет заниматься разработкой приложения. Если ваши разработчики не знакомы с программированием баз данных, выбирайте инструменты и шаблоны, более привычные вашим разработчиком.
- Подумайте о поддержке отладки. Разработчикам приложения будет проще проводить отладку динамического SQL.