kwaku Emma Ответов: 3

Почему оператор select должен использоваться в хранимой процедуре вместо выбора из таблиц или представлений


Я видел людей, использующих операторы select в хранимых процедурах вместо выбора из представлений/таблиц.
Пример. Предположим, что существует представление с именем xview.
Вместо остроумия "select * from xview",
Они делают это:
Создать процедуру spSelect
Как
Выберите * из xview
Конец

Затем они выполняют spSelect, чтобы вернуть тот же результат.

Вопрос
1. каковы плюсы и минусы использования любого из этих способов
2. какие экземпляры следует использовать для выбора из представлений и наоборот.

Что я уже пробовал:

Я еще не пробовал этого делать, но я просто не понимаю, почему они это делают

3 Ответов

Рейтинг:
9

Wendelius

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

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

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

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

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

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


Рейтинг:
2

F-ES Sitecore

В дополнение к тому, что Энди говорит выше, это помогает с безопасностью и обслуживанием держать все через одну точку доступа. Лучше всегда разрешать доступ к коду только через SPs, чем иметь прямой доступ как к SPs, так и к представлениям и иметь связанные с этим осложнения.


Рейтинг:
1

Andy Lanng

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

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

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

Я говорю "почти" вполне сознательно. Если это не делается по чистой привычке, то, вероятно, существуют (или были) какие-то внутренние общие практики или пользовательский исполнитель запросов, который требует (или требовал) хранимых процедур. Причин, лежащих в основе этих возможностей, может быть немного или много.

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

Пример:
Большинство клиентов просто хотят получить все из таблицы, но некоторые должны иметь и "columnname=value" исключено. В зависимости от того, насколько сложен этот выбор, вы можете включить эту логику в SP, не меняя программное обеспечение. Очень полезно, когда вы продаете такой продукт