Сценарии для использования представлений

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

Сосредоточение на определенных данных

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

Например, представление vBikes в образце базы данных База данных AdventureWorks2008R2 дает возможность пользователям видеть названия всех велосипедов, имеющихся на складе в настоящее время. Представление отфильтровывает все поля из таблицы Product, кроме поля Name, и возвращает только названия готовых велосипедов, не указывая велосипедных компонентов.

CREATE VIEW vBikes AS
SELECT DISTINCT p.[Name] FROM Production.Product p
    JOIN Production.ProductInventory i ON p.ProductID = i.ProductID
    JOIN Production.ProductSubCategory ps 
        ON p.ProductSubcategoryID = ps.ProductSubCategoryID 
    JOIN Production.ProductCategory pc 
        ON (ps.ProductCategoryID = pc.ProductCategoryID 
            AND pc.Name = N'Bikes')
        AND i.Quantity > 0

Упрощение обработки данных

Представления могут упростить работу пользователей с данными. Можно определить часто используемые соединения, перспективы, запросы UNION и SELECT как представления, благодаря чему с пользователей снимается необходимость задавать все условия и характеристики каждый раз при выполнении дополнительной операции на этих данных. Например, сложный запрос, используемый для составления отчетов и выполняющий подзапросы, внешние соединения и статистическую обработку для извлечения данных из группы таблиц, может быть создан как представление. Представление упрощает доступ к данным, так как лежащий в его основе запрос не должен записываться или предъявляться каждый раз при формировании отчета; вместо этого выполняется запрос к представлению. Дополнительные сведения об обработке данных см. в разделе Основные принципы запросов.

Хотя в основе представления vBikes не лежит сложный запрос, оно дает пользователям возможность сконцентрироваться на определенных данных, извлекаемых из базы данных База данных AdventureWorks2008R2, без необходимости конструирования предложений JOIN, которые необходимы для образования представления.

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

Обеспечение обратной совместимости

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

Employee(Name, BirthDate, Salary, Department, BuildingName)

Чтобы избежать хранения повторяющихся данных в базе данных, пользователь может решить нормализовать таблицу, разделив ее на следующие две таблицы:

Employee2(Name, BirthDate, Salary, DeptId)

Department(DeptId, BuildingName)

Чтобы обеспечить работу интерфейса обратной совместимости, который по-прежнему ссылается на данные из таблицы Employee, пользователь может удалить старую таблицу Employee и заменить ее следующим представлением:

CREATE VIEW Employee AS
SELECT Name, BirthDate, Salary, BuildingName
FROM Employee2 e, Department d
WHERE e.DeptId = d.DeptId

Приложения, которые раньше выполняли запросы к таблице Employee, теперь могут получать свои данные из представления Employee. Если приложение только считывает данные из Employee, то изменять его не нужно. Кроме того, иногда для поддержки приложений, обновляющих таблицу Employee, нужно добавить триггеры INSTEAD OF в новое представление для сопоставления операций INSERT, DELETE и UPDATE в представлении с аналогичными операциями над базовыми таблицами. Дополнительные сведения см. в разделе Конструирование триггеров INSTEAD OF.

Настройка данных

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

Экспорт и импорт данных

Представления могут использоваться для экспорта данных в другие приложения. Например, нужно, чтобы таблицы Customer и SalesOrderHeader в базе данных База данных AdventureWorks2008R2 использовались для анализа данных о продажах при помощи программы Microsoft Excel. Для этого можно создать представление, основанное на таблицах Customer и SalesOrderHeader. Для экспорта данных, определенных представлением, можно использовать программу bcp. Данные могут быть также импортированы в определенные представления из файлов данных при помощи программы bcp или инструкции BULK INSERT, при условии, что строки могут вставляться в представление при помощи инструкции INSERT. Дополнительные сведения об ограничениях копирования данных в представления см. в разделе Инструкция INSERT (Transact-SQL). Дополнительные сведения об использовании программы bcp и инструкции BULK INSERT для копирования данных в представление и из него см. в разделе Массовый экспорт данных из представления или массовый импорт данных в него.

Объединение секционированных данных на серверах

Оператор языка Transact-SQL UNION может использоваться в представлении для объединения результатов нескольких запросов из отдельных таблиц в единый результирующий набор. Для пользователя такой набор выглядит как одна таблица, называемая секционированным представлением. Например, если в одной таблице содержатся данные о продажах в Вашингтоне, а другая таблица содержит данные о продажах в Калифорнии, представление может быть создано применением оператора объединения UNION этих таблиц. Представление отображает данные о продажах в обоих регионах.

Для использования секционированного представления создается несколько одинаковых таблиц, задаются ограничения для определения диапазона данных, которые могут добавляться в каждую таблицу. Затем создается представление, использующее эти базовые таблицы. При запросе к представлению SQL Server автоматически определяет, какие таблицы участвуют в запросе, и обращается только к этим таблицам. Например, если в запросе задается, что необходимы данные о продажах только в штате Вашингтон, SQL Server считывает только таблицу, содержащую данные о продажах в Вашингтоне; ни к каким другим таблицам доступ не производится.

Секционированные представления могут быть основаны на данных нескольких разнородных источников, например удаленных серверов, для создания федерации серверов базы данных. Например, для объединения данных из различных удаленных серверов, каждый из которых хранит данные для отдельного региона своей организации, могут создаваться распределенные запросы, извлекающие данные из каждого источника, а затем на основании этих распределенных запросов может создаваться представление. Запросы считывают данные только из таблиц на удаленных серверах, которые содержат данные, соответствующие запросу; обращение к другим серверам, ссылки на которые имеются в распределенных запросах в представлении, не производится.

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

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

ПримечаниеПримечание

Предпочтительным способом секционирования локальных данных на одном сервере является применение секционированных таблиц. Дополнительные сведения см. в разделе Секционированные таблицы и индексы.

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

  • На представлении определен триггер INSTEAD OF с логикой поддержки инструкций INSERT, UPDATE и DELETE.

  • Как представление, так и инструкции INSERT, UPDATE и DELETE следуют правилам, определенным для обновляемых секционированных представлений. Дополнительные сведения см. в разделе Создание секционированных представлений.