Sei sulla pagina 1di 17

Vises

jmmaciel@upf.br

Vises - Introduo

No desejvel que todos os usurios sejam capazes de visualizar todos os dados em todas as tabelas do banco de dados. Consideraes sobre segurana podem exigir que determinados dados no estejam disponveis para alguns usurios. Podemos criar uma coleo de relaes personalizadas que se ajustem mais s necessidades dos usurios. Isto pode ser atingido por meio de vises. Uma viso uma tabela virtual que contm dados de uma ou mais tabelas reais (ou outras vises).

Vises - Introduo

Vises permitem que os usurios vejam um banco de dados sob diferentes perspectivas

Tipos de vises
Vises horizontais: quando o conjunto de dados restrito a determinadas linhas Vises verticais: quando o conjunto de dados restrito a determinados colunas Vises horizontais e verticais: combinao das duas acima Vises compostas: rene os dados de duas ou mais tabelas do banco de dados

Definio de Vises

Para definir uma viso devemos usar o comando Create View. Create View <nome> as <consulta>; Precisamos dar um nome viso e definir a consulta que a criar. Create View Empregado_V as Select codemp, nomeemp, endereco From empregado; Select * from Empregado_V;

Pode ser usada para especificar uma coleo de atributos que usada freqentemente. Exemplo: Suponha que a freqentemente desejamos consultar os nomes dos empregados e dos projetos nos quais eles trabalham. Podemos criar uma viso que faa a juno entre Empregado, EmpProj e Projeto e realizar as consultas sobre esta viso. Create view EmpProj_V as Select e.*, p.codproj,nomeproj,numhoras From empregado e, emp_proj ep, projeto p Where e.codemp=ep.codemp and p.codproj=ep.codproj;

Select * from EmpProj_V;

Desta maneira, para responder a consulta podemos utilizar a consulta: Select nomeemp, nomeproj From EmpProj_V;

Em vez de: Select nomeemp, nomeproj From empregado e, emp_proj ep, projeto p Where e.codemp=ep.codemp and p.codproj=ep.codproj;

Podemos especificar nomes de atributos para a viso. Exemplo:

Create view deptinf_v (nomedep, numemps,total_sal) as Select nomedep, count(*),sum(salario) From Empregado2 e, Departamento2 d Where e.coddep= d.coddep Group by nomedep; Select * from deptinf_v;

Os dados da viso esto sempre atualizados. Se modificarmos dados na tabela sobre a qual a viso foi definida, a viso ir refletir as mudanas. Desta maneira, a viso no gerada no momento de sua criao e sim no momento em que consultada.

Para testar: insert into empregado values (5005,1001,5002,Paulo Sousa,1000,Alm. Barroso, 30); select * from deptinf_v;

Para remover a viso: Drop View nome_da_viso;

Vises sobre Vises


Considerando que uma viso tratada como uma tabela pelo SGBD, possvel definir uma viso sobre outra viso. Exemplo: Create view Academia_V as Select codemp, nomeemp, numhoras From EmpProj_V Where nomeproj= 'Academia';

Select * from Academia_V;

Juno entre Vises


Uma viso tratada como uma tabela. Assim, possvel fazer a juno entre duas vises ou entre uma tabela e uma viso. Exemplo: select nomeemp, count(codproj) from empregado_V ev, emp_proj ep where ev.codemp= ep.codemp group by nomeemp;

Atualizao de Vises
Apesar de serem muito teis para consultas. A atualizao de vises nem sempre possvel. Uma atualizao em uma viso criada sobre uma s tabela que no contenha funes de agregao nem agrupamentos (group by) pode ser mapeada diretamente para uma atualizao na tabela base. Exemplo: Update Empregado_V Set nomeemp = 'Ana Souto' Where nomeemp like 'Ana%';

Select * from Empregado_V; Select * from Empregado;

Algumas atualizaes sobe vises no fazem sentido: Exemplo update deptinf_v set total_sal=55000 where nomedep='Contabilidade';

O atributo total_sal obtido atravs da soma dos salrios por departamento. Assim, a atualizao acima no autorizada pelo SGBD.

Algumas observaes sobre atualizao de vises.


Uma viso baseada em uma s tabela pode ser atualizada se os atributos da viso contm a chave primria e todos os atributos obrigatrios. Vises definidas sobre mltiplas tabelas via de regra no so atualizveis. Vises que contm funes de agregao ou agrupamentos no so atualizveis.

Vises - Vantagens
Segurana: cada usurio pode ter determinada permisso para acessar o banco de dados somente atravs de um determinado conjunto de vises Simplicidade de consulta: uma viso pode agrupar dados de diversas tabelas e apresent-los em uma nica viso Simplicidade estrutural: vises podem retornar um conjunto de dados personalizado, apresentando o banco de dados como um conjunto de tabelas virtuais que fazem sentido no contexto do usurio Integridade de dados: dados forem acessados e entrados atravs de uma viso, aplicando-se restries de integridade

Vises - Desvantagens
Desempenho: embora as vises possuam a aparncia de tabelas, o banco de dados precisa processar consultas para produzir para produzir os dados que elas contm Restries de atualizao: quando um usurio atualiza uma viso, o banco de dados precisa traduzir a atualizao em instrues DML que podem envolver uma ou mais tabelas. Isto permitido para vises simples, mas no est disponvel para vises envolvendo mais de uma tabela

Exerccios
Mostrar o contedo da viso em todos os exerccios.
1. 2. 3. 4. 5.

Crie uma viso contendo o nome do projeto, sua durao e o cdigo do departamento responsvel. Crie uma viso contendo o cdigo e nome do empregado e o nome de seus dependentes. Crie uma viso sobre a viso 2 que contenha o nome do empregado e o nmero de dependentes que ele possui. Crie uma viso contendo o nome do empregado e o nmero total de horas que ele trabalhou em projetos. Crie uma consulta que mostre o nome dos departamento e o nome dos projetos pelos quais eles so responsveis (utilize a viso do exerccio 1).

Potrebbero piacerti anche