Преимущество использования Views в MySQL - PullRequest
22 голосов
/ 13 января 2010

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

Мой вопрос: каковы преимущества представлений? В частности, скажем, у меня есть две таблицы:

event | eid, typeid, name
eventtype | typeid, max_team_members

Теперь я создаю представление:

eventdetails | event.eid, event.name, eventtype.max_team_members 
             | where event.typeid=eventtype.typeid

Теперь, если я хочу, чтобы максимальное число членов в команде было разрешено для event, я мог бы:

  • использовать вид
  • сделать запрос на соединение (или, возможно, хранимую процедуру).

Каковы были бы мои преимущества / недостатки в каждом методе?

Другой запрос: если данные в событиях таблицы и типах событий обновляются, возникают ли какие-либо издержки при обновлении данных в представлении (учитывая, что оно кэширует результирующие данные)?

Ответы [ 2 ]

18 голосов
/ 13 января 2010

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

В дополнение к функции безопасности, указанной ранее:

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

Это также позволит вам изменить способ соединения в будущем в одном месте. Возможно, отношение «один ко многим» может стать отношением «многие ко многим», добавив дополнительную таблицу в объединении. Или вы можете принять решение о денормализации и включить все поля типа события в каждую запись события, чтобы вам не приходилось каждый раз присоединяться (место для обмена на время выполнения запроса).

Вы можете позже разделить таблицы, изменив их на трехстороннее объединение, и другие запросы, использующие представление, не нужно будет переписывать.

Вы можете добавить новые столбцы в таблицу (ы) и изменить представление, чтобы исключить новые столбцы, чтобы некоторые старые запросы, использующие «select *», не прерывались при изменении определений таблицы.

13 голосов
/ 13 января 2010

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

...