Я сильный сторонник размещения логики базы данных в базе данных и не разбивая ее между приложением и сервером. Это означает, что я предпочитаю обертывать все вызовы базы данных в хранимых процедурах и представлениях.
Причины вождения - это обслуживание, безопасность и функциональность, а не производительность, хотя производительность часто лучше на стороне сервера.
Причина номер один заключается в том, чтобы изолировать приложение от изменений в базовой структуре данных. Таким образом, если структура данных изменяется, приложение не прерывается (всегда).
Другие причины, по которым приходят на ум:
- Та же логика привыкает за то же самое. То есть, одна часть кода не определяет «foobar» в одну сторону, а другую «foobar» другим способом.
- Аудит и ведение журнала осуществляются в хранимых процедурах, а не с использованием триггеров.
- Таблицы базы данных запрещены для всех пользователей, если они не проходят через определенный интерфейс.
- Более новая версия и более ранняя версия могут часто сосуществовать.
Следует признать, что для одноразового, быстрого и грязного применения эти проблемы могут быть не важны. Тем не менее, я думаю, что неплохо иметь четко определенные интерфейсы (API) между различными компонентами системы, а базы данных и прикладной уровень - яркий пример, когда такие API очень полезны.
Это решение не должно затрагиваться «исполнением» без четкого варианта использования, когда/что должно «улучшить». (Большая часть преимуществ будет достигнута только благодаря хорошему дизайну схемы/транзакции и правильным индексам с использованием методов SPROC/BULK/etc и оптимизации запросов, как указано в фактических номерах производительности.) И мне не хочется развлекать дискуссию SPROC-vs-NO-SPROC этим утром. – user2864740