0% acharam este documento útil (0 voto)
20 visualizações16 páginas

Visões em Banco de Dados: Criação e Uso

Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
20 visualizações16 páginas

Visões em Banco de Dados: Criação e Uso

Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

BANCO DE DADOS

• Capítulo 5: Mais SQL: Consultas complexas,


triggers, views e modificação de esquema

Vanessa Borges – vanessa@[Link]


Visão

• Visão é uma tabela simples derivada de outras tabelas


• Uma view não necessariamente existe em forma física; ela é considerada uma tabela virtual, ao
contrário das tabelas da base

• Forma de se especificar uma tabela que precisa ser acessada frequentemente, embora
essa tabela não exista fisicamente
• Facilita a escrita de consultas complexas

• Existem duas formas de um SGBD implementar visões:

• Modificação de consultas: a visão é criada a cada consulta


• Materialização de visões: a visão é criada na primeira consulta

Banco de Dados FACOM | UFMS 37


Visão – modificação de consulta
CREATE
• Sintaxe para a criação de uma VIEW:

CREATE [OR REPLACE] [ TEMP | TEMPORARY ] VIEW <nome_visão>


[(nome_atributo [, nome_atributo ...])]
AS <SELECT ...>;

• Listar View no psql: \dv


• Onde:
• OR REPLACE: caso a VIEW já exista com o mesmo nome ela será substituída pela mais recente
• TEMP | TEMPORARY: especificado quando queremos que a View seja temporária, as quais são
eliminadas de forma automática quando a sessão atual é finalizada
• Lista de atributos: opcional
• SELECT: especifica o conteúdo da visão

Banco de Dados FACOM | UFMS 38


Visão – modificação de consulta
DROP
• Sintaxe para a remoção de uma VIEW:
DROP VIEW [ IF EXISTS ] <nome_visão>
[CASCADE | RESTRICT];

• Onde:
• IF EXISTS: não retorna erro caso a visão não exista
• CASCADE: remove automaticamente outras visões que dependem desta
• RESTRICT: rejeita operação caso existam dependências

Banco de Dados FACOM | UFMS 39


Operações sobre visões

• Visão “somente leitura”


• Visão que permite somente a realização de operações de seleção

• Visão “atualizável”
• Visão que permite as operações de seleção, inserção, remoção e atualização
• seleção: SELECT
• inserção: INSERT INTO
• remoção: DELETE
• atualização: UPDATE

Banco de Dados FACOM | UFMS 40


Operações sobre visões

• Visões inerentemente atualizáveis não possuem


• Operadores de conjunto
• DISTINCT
• Funções de agregação
• GROUP BY
• ORDER BY
• Subconsulta aninhada
• JOIN
• Stored procedures

Banco de Dados FACOM | UFMS 41


Problema de atualização da visão

• O problema de atualização por meio de visões é a ambiguidade na interpretação do


comando
• Exemplo:

CREATE VIEW vpessoa (cpf, nome_dependente, sexo) AS


(SELECT cpf, pnome, sexo FROM funcionario)
UNION
(SELECT fcpf, nome_dependente, sexo FROM dependente) ; Em qual tabela base
será inserida a tupla?
INSERT INTO vpessoa VALUES ('123456789', 'Jose', 'M');

Banco de Dados FACOM | UFMS 42


Problema de atualização da visão

CREATE VIEW vtrabalhaem_sum_horas AS


(SELECT fcpf, sum(horas) FROM trabalha_em GROUP BY fcpf) ;

• Não há correspondência direta da


soma de horas com um atributo da
tabela base

• Essa visão não pode ser atualizável

Banco de Dados FACOM | UFMS 43


Problema de atualização da visão

CREATE VIEW vfuncionario_unome AS


(SELECT DISTINCT unome FROM funcionario);

UPDATE vfuncionario_unome
SET unome='B.’ • Cada tupla de vfuncionario_unome
WHERE unome = 'Borg'; pode corresponder a várias tuplas de
funcionário, então não há
correspondência direta de um atributo
da visão com um atributo da tabela
base
• Portanto esta visão não pode ser
atualizável

Banco de Dados FACOM | UFMS 44


Visão – atualização

• Exemplo de atualização de view:


Em geral, para ser atualizável,
CREATE VIEW vprojeto5
a visão deve ser derivada de
AS SELECT * FROM projeto WHERE projnumero>10;
apenas uma tabela base e
deve conter a chave primária
da tabela (projnumero)
UPDATE vprojeto5 SET projlocal=’Stanfford’ WHERE
projlocal=’Houston’;

Banco de Dados FACOM | UFMS 45


Materialização de visões
• Como as Views são apenas para leitura e representação lógica dos dados que estão
armazenados nas tabelas do banco de dados, podemos “materializá-las”, ou seja,
armazená-las fisicamente no disco

São muito utilizadas em


• Discussão aplicações onde os dados podem
• Replicação dos dados ficar temporariamente
• Armazenamento de dados agregados desatualizados, com atualizações
• Custo de consultas x custo de atualização periódicas, por exemplo, dados
estatísticos, pois mantêm a
vantagem de desempenho sem
prejuízo na propagação de
atualizações.

Banco de Dados FACOM | UFMS 46


Visão – materialização de visões
CREATE
• Criar view materializada:

CREATE MATERIALIZED VIEW [IF NOT EXISTS] <nome_visão>


[(nome_atributo [, nome_atributo ...])]
AS <SELECT ...> [ WITH [ NO ] DATA ]

• Listar View no psql: \dm


• Onde:
• WITH [ NO ] DATA: especifica se a visão deve ser preenchida no momento da
criação. Caso contrário, a visualização materializada será marcada como não-
digitalizável e não poderá ser consultada até que a opção REFRESH MATERIALIZED
VIEW seja usada

Banco de Dados FACOM | UFMS 47


Visão – materialização de visões
DROP
• Sintaxe para a remoção de uma VIEW:
DROP MATERIALIZED VIEW [ IF EXISTS ] <nome_visão>
[CASCADE | RESTRICT];

• Onde:
• IF EXISTS: não retorna erro caso a visão não exista
• CASCADE: remove automaticamente outras visões que dependem desta
• RESTRICT: rejeita operação caso existam dependências

Banco de Dados FACOM | UFMS 48


Visão – materialização de visões
REFRESH
• Atualização de view materializada

REFRESH MATERIALIZED VIEW <nome_visão>;

Banco de Dados FACOM | UFMS 49


Visão – materialização de visões
ALTER
• Renomeia uma visão já criada

• Sintaxe para a alteração de uma VIEW:

ALTER MATERIALIZED VIEW <nome_visão> RENAME TO


<novo_nome_visão>;

Banco de Dados FACOM | UFMS 50


Implementação de Visões

• Existem duas formas de um SGBD implementar visões:


• Modificação de consultas: a visão é criada a cada consulta
• VANTAGEM:
• Não é necessário mecanismo de atualização para garantia de consistência da visão em
relação às tabelas-base
• DESVANTAGEM:
• Desempenho de consultas frequentes é prejudicado

• Materialização de Visões: a visão é criada na primeira consulta


• VANTAGEM:
• Consultas frequentes à visão têm bom desempenho
• DESVANTAGEM:
• Atualizações nas tabelas-base devem ser propagadas para as visões

Banco de Dados FACOM | UFMS 51

Você também pode gostar