Я прочитываю библию SQL Server 2008 года, и я покрываю раздел представлений. Но автор действительно не объясняет цель представлений. Что такое хорошее использование для представлений? Я должен использовать их в своем веб-сайте и каковы преимущества их?
Другое использование, о котором, похоже, не упоминалось ни в одном из предыдущих ответов, - это более простое развертывание изменений структуры таблицы.
Допустим, вы хотите удалить таблицу ( T_OLD
), содержащую данные для активных пользователей, и вместо этого использовать новую таблицу с аналогичными данными (с именем T_NEW
), но с данными. как для активных, так и для неактивных пользователей, с одним дополнительным столбцом активным
.
Если в вашей системе (-ах) миллионы запросов, выполняющих SELECT something FROM T_OLD WHERE any
, у вас есть два варианта развертывания:
1) Cold Turkey - Измените БД и в то же время измените, протестируйте и выпустите многочисленные фрагменты кода, содержащие указанный запрос. ОЧЕНЬ сложно сделать (или даже согласовать), очень рискованно. Плохой.
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
, но это не всегда так.
Некоторые причины из Википедии :
Представления могут иметь преимущества перед таблицами:
Представление - это уровень абстракции, и он делает то же, что и любой хороший уровень абстракции, включая инкапсуляцию схемы базы данных и защиту вас от последствий изменения внутренней реализации. Детали.
Это интерфейс.
ПРОСМОТРЫ могут использоваться как повторно используемые разделы SELECT / CODE, которые могут быть включены в другие выборки / запросы, которые необходимо объединить, и использовать различные различные фильтры, без необходимости каждый раз воссоздавать весь SELECT.
Это также размещает логику в одном месте, так что вам не нужно менять ее во всей базе кода.
Взгляните на
Выбор между хранимыми процедурами, функциями, представлениями, триггерами, встроенным SQL.
Основная прелесть представления заключается в том, что его можно использовать как таблицу в большинстве {{ 1}} ситуаций, но, в отличие от таблицы, он может инкапсулировать очень сложные вычисления и часто используемые объединения. Он также может использовать практически любой объект в базе данных , кроме хранимых процедур. Представления наиболее полезны, когда вам всегда нужно присоединиться к одному и тому же набору таблиц, например, заказ с подробностями заказа, чтобы получить поля итоговых вычислений и т. Д.
Вот один очень распространенный способ использования представлений для ограничения объекта некоторыми критериями.
Таблица: USERS содержит всех пользователей
Представление: ACTIVE_USERS содержит всех пользователей, за исключением тех, которые заблокированы, заблокированы, ожидают активации и не соответствуют каким-либо критериям, которые вы можете определить в будущем как часть активных требований. Это избавляет от необходимости удалять какие-либо строки из таблицы USERS, если вы решите этого не делать, потому что ACTIVE_USERS всегда может скрыть ненужные строки.
Таким образом, вы можете использовать таблицу на своих страницах управления пользователями, но остальная часть приложения может использовать ACTIVE_USERS, поскольку они могут быть единственными пользователями, которые должны иметь возможность выполнять процессы и получать доступ / изменять данные.
Небольшой список общих причин / использования:
используйте их для изменения формата или "внешнего вида" данных (т. Е. Вы можете объединить имя и фамилию вместе)
выполнять вычисления или другие поисковые запросы на data
денормализует данные (извлекает данные из нескольких таблиц в одно место)
(Скопировано из первого руководства, появившегося в поиске Google (ссылка теперь мертва), но в нем есть все преимущества, которые я бы сам набрал вручную .)
Представления имеют следующие преимущества:
- Безопасность - Представления можно сделать доступными для пользователей, в то время как базовые таблицы недоступны напрямую. Это позволяет администратору баз данных предоставлять пользователям только те данные, которые им нужны, одновременно защищая другие данные в той же таблице.
- Простота - представления можно использовать для скрытия и повторного использования сложных запросов.
- Упрощение или уточнение имени столбца - представления могут использоваться для предоставления псевдонимов имен столбцов, чтобы сделать их более запоминающимися и / или значимыми.
- Ступенька - представления могут служить отправной точкой в «многоуровневом» запросе. Например, вы можете создать представление запроса, в котором подсчитывается количество продаж, совершенных каждым продавцом. Затем вы можете запросить это представление, чтобы сгруппировать продавцов по количеству совершенных ими продаж.
Представления могут позволить вам объединять данные из нескольких разных таблиц и форматировать их (объединять поля, давать более значимые имена полей и т. Д.), Чтобы это было проще для конечных пользователей. Они являются абстракцией модели базы данных. Их также можно использовать для предоставления пользователям доступа к данным в таблице, не давая им прямого доступа к самой таблице.