Есть ли способ выбрать разные столбцы в зависимости от условия? - PullRequest
1 голос
/ 30 марта 2011

ПРАВКА, чтобы удалить неоднозначность: представление как в MVC, а не представление базы данных.

Здравствуйте,

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

В настоящее время я выполняю одну хранимую процедуру, которая возвращает все столбцы select * from X, и я связываю столбцы в зависимости от представления. Я не верю, что это правильный подход, так как я выбираю ненужные столбцы, база данных огромна, а трафик увеличивается.

Какой лучший способ подойти к этому виду дизайна? Должен ли я придерживаться пути 1 SP или иметь хранимую процедуру для каждого представления (каждый SP возвращает разные столбцы). Есть ли здесь шаблон дизайна, который может быть полезен? Я думал об указании столбцов для SP, но это сделает обслуживание кошмаром, так как я должен отслеживать аргументы столбцов для каждого представления.

Спасибо.

Ответы [ 3 ]

1 голос
/ 30 марта 2011

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

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

Я предполагаю, что вы используете прямой доступ к базе данных, а не какую-либо форму ORM или DAL.Большинство этих систем, если они имеют сильную поддержку хранимых процедур, построены на предпосылке, что хранимый процесс всегда будет возвращать наборы результатов с одинаковой «формой» (то есть с одинаковыми столбцами).

0 голосов
/ 30 марта 2011

Исходя из параметра хранимой процедуры, вы можете использовать оператор CASE для возврата разных значений (из разных столбцов). Однако фактическое имя столбца будет фиксированным.

псевдокод:

procedure get_stuff (@p_what varchar)
as
begin

  select case @p_what
      when 'NAME' then t.name
      when 'DESCR' then t.description
      else null
    end as the_column
  from my_table t

end  
0 голосов
/ 30 марта 2011

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

Вы можете сделать это двумя различными способами:

  • Передайте список столбцов в виде строки хранимой процедуре.Это небезопасно и сложно отследить, к чему осуществляется доступ
  • Передать идентификатор, представляющий список столбцов для извлечения.Этот идентификатор можно использовать для поиска таблицы конфигурации, в которой хранятся наиболее релевантные наборы столбцов (конечно, не все возможные подмножества).Это более безопасно и более управляемо.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...