2008-10-31 4 views
4

Прежде всего, это касается partial question, но это не совсем то, о чем я прошу, так что нести меня и пойти на это.Сохраненные процедуры или встроенные запросы?

Мой вопрос, после того, глядя на то, что SubSonic делает и отличные видео с Робом Коннери мне нужно спросить: Должны ли мы использовать инструмент, как это и делают Роликовые запросов или мы будем делать запросы используя исходящий вызов к хранимой процедуре ?

Я не хочу сводить к минимуму любую работу от Роба (что, я думаю, это потрясающе), но я просто хочу, чтобы ваше мнение по этой причине мне нужно было начать новый проект, и я нахожусь в середине линии; Должен ли я использовать SubSonic (или другой подобный инструмент, как NHibernate) или я просто продолжать свой метод, который всегда вызывать хранимую процедуру, даже если это просто, как

Select this, that from myTable where myStuff = StackOverflow; 

ответ

2

Он не должен быть один или другими , Если это простой запрос, используйте инструмент запросов SubSonic. Если это сложнее, используйте хранимую процедуру и загрузите коллекцию или создайте набор данных из результатов.

Смотрите здесь: What are the pros and cons to keeping SQL in Stored Procs versus Code и здесь SubSonic and Stored Procedures

2

См ответы here и here. Я использую sprocs всякий раз, когда могу, за исключением случаев, когда красная лента означает, что требуется неделя, чтобы попасть в базу данных.

1

Я лично не буду следовать жестким правилам. Разумеется, на этапах разработки вы хотите быстро изменить свои запросы, чтобы я мог их встроить.

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

1/Хранимые процедуры группируют данные и код для обработки/извлечения этих данных в одной точке. Это значительно облегчает жизнь вашего администратора баз данных (при условии, что ваше приложение достаточно значимо, чтобы гарантировать DBA), поскольку они могут оптимизировать на основе известных факторов.

Один из больших ошибок DBA - это специальные запросы (особенно клоуны, которые не знают, что такое полное сканирование таблицы). Администраторы баз данных предпочитают иметь хорошие согласованные запросы, к которым они могут настраивать базу данных.

2 Сохраненные процедуры могут содержать логику, которая лучше всего оставить в базе данных. Я видел хранимые procs в DB2/z со многими десятками строк, но все, что нужно клиенту, это одна строка, например «дайте мне этот список».

Поскольку логика «этого списка» хранится в базе данных, администраторы баз данных могут изменять способ ее хранения и извлечения по желанию без, компрометирующих или изменяющих код клиента. Это похоже на инкапсуляцию, которая сделала объектно-ориентированные языки более «чистыми», чем предыдущие.

+0

Что мне больше нравится в SP, так это то, что я могу получить несколько результатов только в одном вызове, добавленном в DataSet и извлечении DataTables, мне это нравится, и я всегда думал, что я сэкономлю много времени вызовите один раз вместо 4 или 5 раз базу данных. – balexandre 2008-10-31 00:38:05

+1

Вы можете сделать это с помощью встроенных запросов. – 2008-10-31 01:09:33

2

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

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

1

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

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

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

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

0

Вы собираетесь получать доступ к своей базе данных только из одного приложения?

Если нет, то вам, вероятно, лучше использовать хранимые процедуры, чтобы вы могли иметь согласованный интерфейс с вашей базой данных.

Есть ли значительные затраты на распространение приложения, если вам необходимо внести изменения?

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

Вы вообще обеспокоены безопасностью своей базы данных?

Если это так, то вы, вероятно, захотите использовать хранимые процедуры, чтобы вам не приходилось предоставлять прямой доступ к таблицам для пользователя.

Если вы пишете небольшое приложение, не имеющее широкой аудитории, для системы, которая не будет использоваться или доступна за пределами вашего приложения, тогда встроенный SQL может быть в порядке.

0

Я предпочитаю встроенный sql, если только хранимая процедура не имеет реальной логики (переменные, курсоры и т. Д.). Я использую LINQ to SQL в последнее время и беру сгенерированные классы и добавляю частичные классы, у которых есть предопределенные общие запросы linq. Я чувствую, что это способствует более быстрому развитию.

Редактировать: Я знаю, что я собираюсь сбить с толку. Если вы когда-либо говорите о внешних ключах или хранимых процедурах, вы получите понижение. Администраторы баз данных нуждаются в безопасности работы, я думаю ...

0

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

Для базовых операций CRUD встроенный SQL будет прямым. Для более сложных потребностей в данных необходимо будет создать представление, а затем вы выполните Subsonic-запрос в представлении.

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

В настоящее время субзвуковое приложение использует все три варианта с отличными результатами.

0
  1. Хранимые процедуры группируют данные и код для обработки/извлечения этих данных в одной точке. Это значительно облегчает жизнь вашего администратора баз данных (при условии, что ваше приложение достаточно значимо, чтобы гарантировать DBA), поскольку они могут оптимизировать на основе известных факторов.

  2. Сохраненные процедуры могут содержать логику, которая лучше всего оставить в базе данных. Я видел хранимые procs в DB2/z со многими десятками строк, но все, что нужно клиенту, это одна строка, например «дайте мне этот список».

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

Так что используйте встроенные запросы, когда у вас четкая логика; в противном случае предпочитают хранимые процедуры.

0

Преимущества хранимой процедуры (на мой взгляд)

  1. SQL, находится в одном месте
  2. Вы можете получить планы запросов.
  3. Вы можете изменить структуру базы данных, если это необходимо для повышения производительности
  4. Они составляются и, таким образом, эти планы запросов не должны получить построены на лета
  5. Если вы используете разрешение - вы можете быть уверены в запросах, приложение сделает.