Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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;
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;
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;
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%';
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.
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).