2009-08-08 3 views
0

Я сделал политику компании, что все данные должны быть выполнены через Sprocs. Это включает в себя выбор, обновление, удаление и вставки. Мы начинаем их перерастать. Я его переутомляю? Выполняются выборки, а результаты сбрасываются в пользовательский DAL.SQL Views и Sprocs

У меня такое чувство, что это вопрос о святой войне. Я склоняюсь к тому, что sprocs слишком много для простых выборок, но необходимость обновления, вставки и удаления. Одним из аргументов для sprocs является безопасность. Некоторые пользователи не должны иметь доступ к определенным частям приложения. Кто здесь фактически создает более одного пользователя на db для веб-сайта? Без рук?

У меня также есть необходимость в получении статистики по нескольким таблицам. Это один запрос с несколькими вызовами в UDF. Эти показатели меняются с каждой минутой. Должен ли я использовать представление или sproc? Я учусь в sproc, так как в любом случае вид просто должен будет перестраиваться. Это правильное предположение?

+0

Сохраненные процедуры трудно поддерживать, поэтому в наши дни это обычная практика, чтобы избежать их как можно большего. – Ray

+3

Сохраненные процедуры намного проще в обслуживании, чем различные клиенты, которые обращаются к базе данных с использованием разных технологий. Позже это неизбежно, как только ваша компания старше пяти лет. – Andomar

+0

Oracle поддерживает пакеты, которые используются для логической группировки функций и процедур. Компромисс заключается в том, что им не хватает возможности предоставлять доступ на основе детализации (функции или процедуры). –

ответ

1

В дополнение к хранимым процедурам вы можете разрешить доступ к представлениям. Вы все же можете контролировать доступ к представлениям, но один вид может заменить многие хранимые процедуры.

Вы также можете группировать хранимые процедуры по функциональности и использовать префикс для каждой группы. Например, cart_AddItem или user_GetPreferences. Это много работы по внедрению ретроактивно, но никогда не поздно начать.

Если вы поддерживаете базу данных, к которой обращаются несколько программ и/или веб-сайтов, хранимые процедуры - единственный способ, которым я знаю, чтобы поддерживать сложность. С другой стороны, если это всего лишь один веб-сайт, уровень доступа к данным, подобный LINQ, может работать очень хорошо.

+1

Все наши сайты построены в предположении, что к ним придет что-то другое. Для нас не редкость создавать веб-сайт, тогда клиент хочет, чтобы что-то из процесса запускалось, как запланированное задание. Я на самом деле просто добавил функции префикса к нашему генератору кода. Это несколько помогает. Я еще не погрузился в LINQ. Я очень неравнодушен к моим шаблонам DAL. – Darthg8r

2

ОК, это будет заставлять меня звучать, как будто я придурок, но я действительно не хочу быть. Мой ответ на ваш вопрос - еще один вопрос.

«Какой бизнес вы бы определение политики развития, если вы не понять, как работает база данных?»

Вы говорите, что «просмотр просто должен был бы перестраиваться каждый раз в любом случае». Вы говорите, что любой код с представлением перекомпилируется каждый раз, когда он запрашивается? Потому что это абсолютно неверно (по крайней мере, на Oracle и SQL Server, то есть). Использование представлений - гораздо более гибкий способ получить эффективные запросы, чем хранимые процедуры, потому что оптимизатор может повторно оптимизировать ваше представление по тому, как вы его используете. И как только это было сделано, план запроса кэшируется, поэтому ему не нужно выполнять перекомпиляцию. Показательный пример: Вы создаете эту точку зрения:

Затем вы решите, что вы хотите получить список всех клиентов по имени Джон Смит:

SELECT c.CustomerID 
FROM myOrders 
WHERE c.LastName = 'Smith' AND c.FirstName = 'John'; 

Потому что это представление, то присоединиться к «Заказы» получает оптимизирован. Если бы вы попытались сделать это с помощью модуляции в хранимой процедуре, вы бы не смогли. Вам, вероятно, придется сделать еще один sproc только для этой цели. И довольно скоро вы попадаете в проблему, которая у вас есть, что составляет тонну едва поддерживаемых процедур.

Почему вы используете хранимые процедуры? В чем проблема, которую вы пытаетесь решить? Инкапсуляция? Я бы сказал, что для SELECTs UDF могут быть более полезными. Я также хотел бы утверждать, что запросы LINQ-типа на среднем уровне еще более гибкие. Вы пытаетесь оптимизировать производительность, используя хранимые процедуры? Если это так, знайте и понимайте, что каждый запрошенный вами конкретный запрос оптимизируется и кэшируется.Если вы используете SQL Server 2005+, вы можете даже заставить его параметризовать и кэшировать ваши планы запросов, даже если вы явно не укажете параметры.

Сохраненные процедуры имеют свое место, но их недостатки в ремонтопригодности, гибкости использования и да, даже в производительности, означают, что вы должны использовать их разумно, а не создавать общие политики для ваших разработчиков.

+1

Доступ к данным через хранимые процедуры - способ управления сложностью; для администратора базы данных, чтобы сохранить контроль над базой данных. Ограничение разработчиков - это точно. Речь идет не о «политике одеяла в разработчиках», а о свободе разработчиков за качество базы данных. В долгосрочной перспективе это окупается большим образом – Andomar

+0

Это очень плохой способ управления сложностью по сравнению с более современными методами. Еще в 1999 году, когда у вас не было достоверных ИЛИ-карт, это могло быть правдой. Это уже не так. В настоящее время у вас есть [n] Hibernate, LINQ to SQL, Entity Framework (2.0) и т. Д. Они легко справляются со всеми вашими шаблонами доступа к CRUD без каких-либо значительных компромиссов в производительности. А так как насчет «контроля над вашей базой данных DBA»? Если весь код доступа к данным должен пройти через ваш администратор базы данных, чтобы превратить его в ваш продукт, я содрогнулся, чтобы подумать, сколько времени вам нужно, чтобы выпустить программное обеспечение. –

+0

Весь мой код доступа к данным проходит через наш администратор баз данных, и наш цикл выпуска составляет около 15 минут. Уровень хранимой процедуры привел к созданию базы данных с высокой степенью целостности. Наш администратор баз данных чувствует себя уверенно и уверенно. – Andomar

Смежные вопросы