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

Завершено

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

Общие сведения о представлениях в SQL Server

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

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

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

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

Создание базового представления

Вы создаете представление с помощью инструкции CREATE VIEW , за которой следует SELECT запрос. Определение представления определяет, какие данные отображаются при запросе представления.

Вот простое представление, которое объединяет сведения о клиенте и заказе:

CREATE VIEW Sales.CustomerOrders
AS
SELECT 
    c.CustomerID,
    c.CustomerName,
    c.Email,
    o.OrderID,
    o.OrderDate,
    o.TotalAmount
FROM Sales.Customers c
INNER JOIN Sales.Orders o ON c.CustomerID = o.CustomerID;

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

SELECT * FROM Sales.CustomerOrders
WHERE CustomerName = 'Contoso Ltd';

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

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

CREATE VIEW Sales.OrderSummary
AS
SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount,
    CASE 
        WHEN TotalAmount < 100 THEN 'Small'
        WHEN TotalAmount < 1000 THEN 'Medium'
        ELSE 'Large'
    END AS OrderSize
FROM Sales.Orders;

Это представление обрабатывает логику классификации в одном месте. Каждый запрос к OrderSummary получает одно и то же вычисление без дублирования CASE выражения.

Применение рекомендаций по проектированию

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

Явно укажите имена столбцов вместо использования SELECT *. Явные столбцы делают представления более поддерживаемыми и предотвращают непредвиденные результаты при изменении базовых таблиц. Если кто-то добавляет столбец в базовую таблицу, определение представления остается согласованным:

CREATE VIEW Sales.ActiveCustomers
AS
SELECT 
    CustomerID,
    CustomerName,
    Email,
    Phone
FROM Sales.Customers
WHERE IsActive = 1;

Используйте инструкцию WITH CHECK OPTION, когда представления будут обрабатывать изменения данных. Этот параметр гарантирует, что выражения INSERT и UPDATE через представление затрагивают только строки, видимые в представлении:

CREATE VIEW Sales.HighValueOrders
AS
SELECT 
    OrderID,
    CustomerID,
    OrderDate,
    TotalAmount
FROM Sales.Orders
WHERE TotalAmount > 1000
WITH CHECK OPTION;

С этим параметром невозможно вставить заказ с общей суммой 500 через представление HighValueOrders. База данных отклоняет операцию, так как новая строка не соответствует условию представления WHERE .

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

Определение того, когда следует использовать представления

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

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

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

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

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

Если вам нужно инкапсулировать логику повторного использования запросов без параметров, и вы хотите представить данные упрощенным способом, представления — это ваше решение. Они мостят разрыв между физической структурой базы данных и логическим представлением данных, необходимых приложениям.