«Преждевременная оптимизация - корень всего зла (в большинстве случаев, во всяком случае) в компьютерном программировании», - Дональд Кнут
База данных именно это; уровень данных вашего приложения. Его задача состоит в том, чтобы предоставить вашему приложению запрашиваемые данные и сохранить предоставленные ему данные. Ваше приложение - это место для размещения кода, который действительно работает с данными; отображение, подтверждение и т. д.
В то время как настроения в строке заголовка замечательны, а с точностью до точки (мельчайших фильтрации, проектирования, группировка и т.д. , должны в подавляющем большинстве случаев быть оставлено в БД), определение «хорошо» может быть в заказ. Задач, которые SQL Server может выполнять с высоким уровнем производительности, много, но задач, которые вы можете продемонстрироватьчто SQL Server делает правильно изолированным, повторяемым образом, очень мало. SQL Management Studio - это отличная среда IDE для баз данных (особенно с учетом других опций, с которыми я работал, например, TOAD), но у нее есть свои ограничения, во-первых, в том числе то, что вы используете ее для выполнения (или любой процедурный код, который вы выполняете в БД внизу) по определению является «побочным эффектом» (изменением состояния, лежащим за пределами области памяти вашего процесса). Кроме того, процедурный код в SQL Server только сейчас, благодаря новейшим средам разработки и инструментам, может быть измерен так, как управляемый код может использовать метрики покрытия и анализ пути (так что вы можете продемонстрировать, что этот конкретный оператор if встречается в тестах X) , Y и Z, и тест X предназначен для выполнения условия и выполнения этой половины, в то время как Y и Z выполняют «остальное» , Это, в свою очередь, предполагает, что у вас есть тест, который может установить базу данных с определенным начальным состоянием, выполнить процедурный код базы данных посредством какого-либо действия и подтвердить ожидаемые результаты.
Все это гораздо сложнее и сложнее, чем решение, предоставляемое большинством уровней доступа к данным; Предположим, что слой данных (и, в этом отношении, DAL) знает, как выполнять свою работу, когда задан правильный ввод, а затем проверьте, что ваш код обеспечивает правильный ввод. Сохраняя процедурный код, такой как SP и триггеры, за пределами БД и вместо этого выполняя такие действия в коде приложения, указанный код приложения намного проще в применении.