Criar visualizações

Concluído

As exibições simplificam a forma como você acessa e apresenta dados no SQL Server. Como desenvolvedor do SQL, você cria exibições para encapsular consultas complexas, fornecer limites de segurança e apresentar dados em um formato que corresponda às necessidades do aplicativo.

Entender as visões no SQL Server

Uma exibição é uma tabela virtual baseada em uma instrução SQL SELECT. Ao contrário das tabelas físicas, as exibições não armazenam os próprios dados. Em vez disso, eles recuperam dados de tabelas subjacentes sempre que você os consulta.

Diagrama mostrando como uma exibição recupera dados de tabelas subjacentes.

Com as exibições, você pode ocultar a complexidade de cláusulas JOIN, cálculos e filtros do código do aplicativo. Por exemplo, se sua aplicação frequentemente precisar de pedidos de clientes com detalhes do produto, você poderá criar uma exibição que use JOIN nas tabelas Clientes, Pedidos e Produtos. Em seguida, seu aplicativo consulta uma única visualização em vez de escrever o mesmo complexo JOIN repetidamente.

As exibições também fornecem uma camada de segurança. Você pode conceder aos usuários acesso a colunas específicas por meio de uma exibição, restringindo o acesso às tabelas subjacentes. Essa abordagem permite que você exponha apenas os dados de que os usuários precisam sem dar a eles acesso completo à tabela.

Criar uma exibição básica

Você cria uma exibição usando a CREATE VIEW instrução seguida por uma SELECT consulta. A definição de exibição determina quais dados são exibidos quando você consulta a exibição.

Aqui está uma exibição simples que combina informações de pedido e cliente:

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;

Depois de criar essa exibição, você pode consultá-la como qualquer tabela:

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

A exibição executa a instrução SELECT subjacente e retorna os resultados como se fossem provenientes de uma única tabela. Essa simplificação torna o código do aplicativo mais limpo e fácil de manter.

Você também pode criar exibições com colunas calculadas. A exibição a seguir adiciona uma coluna que categoriza pedidos por tamanho:

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;

Essa visão gerencia a lógica de categorização em um só lugar. Cada consulta em relação a OrderSummary obtém o mesmo cálculo sem duplicar a CASE expressão.

Aplicar considerações de design

Ao projetar visualizações, considere como elas serão usadas e mantidas. Exibições bem projetadas equilibram simplicidade, desempenho e segurança.

Especifique os nomes de coluna explicitamente em vez de usar SELECT *. As colunas explícitas tornam as exibições mais mantenedíveis e impedem resultados inesperados quando as tabelas subjacentes são alteradas. Se alguém adicionar uma coluna a uma tabela base, sua definição de exibição permanecerá consistente:

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

Use a cláusula WITH CHECK OPTION quando as exibições tratarem as modificações de dados. Essa opção garante que as instruções INSERT e UPDATE, através da exibição, afetem apenas as linhas visíveis na exibição.

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

Com essa opção, você não pode inserir uma ordem com TotalAmount de 500 por meio da exibição HighValueOrders. O banco de dados rejeita a operação porque a nova linha não atenderia à condição da WHERE exibição.

Mantenha as definições de exibição focadas em uma finalidade específica. Uma exibição que tenta atender a várias finalidades geralmente se torna difícil de otimizar e entender. Crie exibições separadas para diferentes casos de uso em vez de criar uma exibição complexa.

Determinar quando usar exibições

As exibições se destacam em cenários específicos onde suas características proporcionam benefícios claros. Entender esses cenários ajuda você a escolher a ferramenta certa para cada situação.

Use exibições para simplificar consultas complexas que vários aplicativos ou usuários precisam executar. Em vez de exigir que todos entendam a complexidade de unir cinco tabelas com condições específicas, crie uma exibição uma vez. Essa centralização também significa que você pode otimizar ou modificar a lógica em um só lugar.

Considere o uso de exibições quando precisar restringir o acesso aos dados no nível da coluna ou da linha. Uma visualização pode expor apenas as colunas apropriadas para um papel enquanto oculta informações confidenciais. Combinados com as permissões apropriadas, as exibições permitem que você conceda acesso a dados específicos sem expor tabelas inteiras.

As exibições funcionam bem para apresentar dados em formatos diferentes para diferentes finalidades. Você pode ter uma tabela Produtos com detalhes técnicos, mas sua equipe de relatório precisa de uma versão simplificada com campos calculados. Crie uma exibição que transforme e agrega os dados adequadamente.

Ao mesmo tempo, reconheça quando outros objetos servem melhor. Para consultas críticas de desempenho que sempre retornam os mesmos resultados, exibições indexadas (exibições materializadas) armazenam fisicamente o conjunto de resultados. Para cálculos complexos que aceitam parâmetros, as funções definidas pelo usuário fornecem mais flexibilidade. Para a lógica de modificação de dados, os procedimentos armazenados oferecem melhor controle.

Quando você precisa encapsular a lógica de consulta reutilizável sem parâmetros e deseja apresentar dados de forma simplificada, as exibições são sua solução. Eles fazem a ponte entre a estrutura do banco de dados físico e a exibição lógica dos dados de que seus aplicativos precisam.