Что является хорошей причиной для использования представлений SQL? - PullRequest
85 голосов
/ 21 апреля 2010

Я читаю библию SQL Server 2008 и освещаю раздел представлений.Но автор действительно не объясняет цель просмотров.Что хорошего в использовании для просмотра?Должен ли я использовать их на своем веб-сайте и каковы их преимущества?

Ответы [ 11 ]

71 голосов
/ 21 апреля 2010

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

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

Если в вашей системе есть gazillion запросов, выполняющих SELECT whatever FROM T_OLD WHERE whatever, у вас есть два варианта развертывания:

1) Холодная Турция - Измените базу данных и, в то же время, измените, протестируйте и выпустите многочисленные фрагменты кода, которые содержали указанный запрос. ОЧЕНЬ сложно сделать (или даже координировать), очень рискованно. Плохо.

2) Постепенно - измените базу данных, создав T_NEW, отбросив T_OLD и создав вместо него VIEW с именем T_OLD, который имитирует таблицу T_OLD на 100% (например, запрос представления SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Это позволит вам избежать выпуска ЛЮБОГО кода, который в настоящее время выбирается из T_OLD, и вносить изменения для переноса кода из T_OLD в T_NEW на досуге.

Это простой пример, есть и другие, более вовлеченные.

P.S. С другой стороны, вам, вероятно, следовало бы иметь API хранимых процедур вместо прямых запросов от T_OLD, но это не всегда так.

39 голосов
/ 21 апреля 2010

(Скопировано из первого учебника , появившегося в поиске Google , но оно обладает всеми преимуществами, которые я бы набрал самостоятельно.)

Представления имеют следующие преимущества:

  • Безопасность - представления могут быть доступны пользователям, в то время как базовые таблицы не доступны напрямую. Это позволяет администратору базы данных предоставлять пользователям только те данные, которые им нужны, при этом защищая другие данные в той же таблице.
  • Простота. Представления могут использоваться для скрытия и повторного использования сложных запросов.
  • Упрощение или уточнение имени столбца. Представления могут использоваться для предоставления псевдонимов имен столбцов, чтобы сделать их более запоминающимися и / или значимыми.
  • Ступенька - Представления могут обеспечить ступеньку в «многоуровневом» запросе. Например, вы можете создать представление запроса, в котором будет подсчитано количество продаж, совершенных каждым продавцом. Затем вы можете запросить это представление, чтобы сгруппировать продавцов по количеству совершенных продаж.
15 голосов
/ 21 апреля 2010

Некоторые причины из Википедии :

Представления могут предоставить преимущества по сравнению с таблицами:

  1. Представления могут представлять собой подмножество данных, содержащихся в таблице
  2. Представления могут объединять и упрощать несколько таблиц в одну виртуальную таблицу
  3. Представления могут действовать как агрегированные таблицы , где ядро ​​базы данных агрегирует данные (сумма, среднее и т. д.) и представляет вычисленные результаты как часть данных
  4. Представления могут скрыть сложность данных ; например, вид может выглядеть как Sales2000 или Sales2001, с прозрачным разделением фактической базовой таблицы
  5. Просмотры очень мало места для хранения ; база данных содержит только определение представления, а не копия всех данных, которые оно представляет
  6. В зависимости от используемого механизма SQL представления могут обеспечивать дополнительную безопасность
  7. Представления могут ограничивать степень воздействия таблицы или таблиц на внешний мир
13 голосов
/ 21 апреля 2010

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

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

Посмотрите на

Выбор между хранимыми процедурами, функциями, представлениями, триггерами, встроенным SQL

Основная красота вида в том, что он можно использовать как стол в большинстве ситуации, но в отличие от таблицы, это может инкапсулировать очень сложные вычисления и часто используемые объединения. Это также может использовать практически любой объект в БД за исключением хранимых процедур. Просмотры наиболее полезны, когда вам всегда нужно чтобы присоединиться к тому же набору таблиц, скажем, Заказать с деталями заказа, чтобы получить поля суммарного расчета и т. д.

9 голосов
/ 21 апреля 2010

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

Это интерфейс.

3 голосов
/ 21 апреля 2010

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

Таблица: USERS содержит всех пользователей

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

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

2 голосов
/ 28 апреля 2016

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

  • Простота. Представления могут использоваться для скрытия сложных запросов.
  • Безопасность - представление может скрывать важную информацию от конечного пользователя, создавая представление для некоторых выбранных столбцов
  • Безопасность - Защитите таблицу, чтобы изменить ее структуру с помощью VIEW.
  • Избыточность - Сокращение избыточного кода в каждой процедуре / запросе с помощью общего представления.
  • Расчет - Все вычисления могут быть выполнены один раз в запросе представления.
  • Значимое имя - Таблица может иметь имя для идентификатора, например tbl_org_emp_id, которое может иметь псевдоним, например, [Employee No], или какое-либо значимое имя.

С imexploring.com

2 голосов
/ 21 апреля 2010

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

1 голос
/ 21 апреля 2010

Небольшой список распространенных причин / применений:

  • используйте их для изменения формата или «вида» данных (т. Е. Вы можете объединить имя и фамилию вместе)

    выполнение вычислений или другой поиск данных

    денормализация данных (извлечение данных из нескольких таблиц в одно место)

0 голосов
/ 25 июня 2014

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

Например, попробуйте

создать вид, который они не могут пройти, как выбрать * из

и попробуйте обновление для неприятного сюрприза ...

(MSSQL)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...