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.