View

Views em Bancos de Dados

O que são Views?

Uma view é uma tabela virtual baseada no resultado de uma consulta SQL. Ela não armazena dados fisicamente, mas sim a definição de uma consulta que é executada sempre que a view é referenciada.

  • View Simples: Consulta a uma única tabela com filtros básicos.
  • View Complexa: Combina múltiplas tabelas com operações como JOIN, GROUP BY, etc.

Tipos de Views

Tipo Descrição Exemplo
View Padrão Consulta não materializada, executada sob demanda CREATE VIEW vw_clientes AS SELECT * FROM clientes WHERE ativo = true;
Materialized View Armazena fisicamente o resultado da consulta para melhor desempenho CREATE MATERIALIZED VIEW mv_vendas_mensais AS SELECT ... REFRESH EVERY 1 DAY;

Vantagens do Uso de Views

  • Segurança: Restringe acesso a colunas sensíveis (ex: esconde CPF ou salários)
  • Simplificação: Esconde complexidade de consultas multi-tabela
  • Consistência: Centraliza regras de negócio (ex: cálculos de comissão)
  • Desempenho: Views materializadas aceleram consultas frequentes

Sintaxe Básica

Criação:

CREATE [OR REPLACE] [TEMP | TEMPORARY] VIEW nome_da_view [(coluna1, coluna2)]
AS
  consulta_sql
[WITH [CASCADED | LOCAL] CHECK OPTION];

Exemplo Prático:

-- View para clientes ativos com endereço completo
CREATE VIEW vw_clientes_ativos AS
SELECT c.id, c.nome, e.cidade, e.estado
FROM clientes c
JOIN enderecos e ON c.id = e.cliente_id
WHERE c.ativo = true;

Views Materializadas

Diferente das views tradicionais, as views materializadas armazenam fisicamente os resultados da consulta e podem ser atualizadas periodicamente:

CREATE MATERIALIZED VIEW mv_vendas_2023 AS
SELECT produto, SUM(valor) as total
FROM vendas
WHERE data BETWEEN '2023-01-01' AND '2023-12-31'
GROUP BY produto;

-- Atualização manual
REFRESH MATERIALIZED VIEW mv_vendas_2023;

-- Atualização automática (PostgreSQL 9.4+)
REFRESH MATERIALIZED VIEW CONCURRENTLY mv_vendas_2023;

Limitações e Cuidados

  • Views padrão não melhoram desempenho (são "virtual tables")
  • Alterações em tabelas base podem exigir recriação da view
  • Views materializadas consomem espaço em disco
  • Não suportam parâmetros dinâmicos (para isso, use funções)

Exemplo Avançado: View Hierárquica

View recursiva para estrutura organizacional:

CREATE RECURSIVE VIEW vw_organograma (id, nome, cargo, supervisor_id, nivel) AS
-- Caso base: CEO
SELECT id, nome, cargo, supervisor_id, 0
FROM funcionarios
WHERE supervisor_id IS NULL

UNION ALL

-- Caso recursivo: subordinados
SELECT f.id, f.nome, f.cargo, f.supervisor_id, o.nivel + 1
FROM funcionarios f
JOIN vw_organograma o ON f.supervisor_id = o.id;

Conclusão

Views são ferramentas versáteis que promovem segurança, desempenho e organização em bancos de dados relacionais. Quando combinadas com outras técnicas como stored procedures e funções, tornam-se componentes poderosos para a construção de sistemas escaláveis e de fácil manutenção. O uso adequado de views materializadas pode ser particularmente impactante em ambientes analíticos ou com grandes volumes de dados.