Você está na página 1de 7

Visôes - Definição

• Uma visão corresponde a uma relação “virtual” que não forma


parte do conjunto de relações reais de um Banco de Dados mas
SQL - Visões que é visível para os usuários como tal.
• Forma Geral:

CREATE VIEW V AS <Expressão de Consulta>

onde <Expressão de Consulta> em geral corresponde a uma


consulta, em geral SELECT... FROM .... WHERE.
Chamamos de tabelas fonte àquelas que são consultadas
para a criação da visão

SQL - L. M. del Val Cura 1 SQL - L. M. del Val Cura 2

1
Banco de dados para os exemplos Uso de visôes - restrição de acesso

• Forma de restringir o acesso de usuários a apenas uma parte


Empregado(RG,Nome,Salário,Sexo,CodDpto)
das tabelas do Banco de Dados (Ocultamento de informação)
Departamento(Codigo,Nome,Local,RGChefe)
Exemplo com restrições de atributos: “Criar uma visão com a
Projeto(Num,Nome,RGCoord,Orçamento,CodDpto) informação dos projetos dos diferentes departamentos mostrando
unicamente nome e código dos departamentos que os controlam”:
TrabEmProjeto(RG,Num,NumeroHoras)
CREATE VIEW ProjetosDptos AS
Dependente(RGEmpr,Nome,Idade,Sexo,Parentesco)
SELECT Num, Nome, CodDpto
FROM Projetos

SQL - L. M. del Val Cura 3 SQL - L. M. del Val Cura 4

2
Uso de visões - reorganização da
Uso de visôes - restrição de acesso
informação
Exemplo com restrições de tuplas: “Criar uma visão com todos os • Como meio de reorganizar a informação para melhor
atributos dos projetos do departamento 2030”: apresentação ou para facilitar sua “visão” para determinados
CREATE VIEW Projetos2030 AS usuários
SELECT *
FROM Projeto
WHERE NumDpto = 2030 Exemplo para funcionário responsável pelos seguros de saúde:
“Criar uma visão com Nome e Sexo de todas as pessoas cujos
Exemplo com restrições de atributos e tuplas: “Criar uma visão com seguros de saúde a empresa fornece”:
RG, nome e sexo dos Empregados que trabalham no Projeto número CREATE VIEW Segurados AS
25”: ( SELECT Nome, Sexo
FROM Empregados )
CREATE VIEW Projetos2030 AS UNION
SELECT RG, Nome, Sexo ( SELECT Nome, Sexo
FROM Empregados AS E, TrabEmProjeto AS T FROM Dependentes )
WHERE (E.RG = T.RG) and (T.Num = 25)

SQL - L. M. del Val Cura 5 SQL - L. M. del Val Cura 6

3
Uso de visões - reorganização da
Uso de visões - atributos calculados
informação
Exemplo de reorganização da informação: “Criar uma visão com • Para reorganizar em forma de tabelas informação obtida a partir
nomes dos projetos, junto com o orçamento, nome de empregado de atributos calculados. Ex: funções de agregação
coordenados e nome do departamento responsável”: Exemplo de reorganização dos dados: “Criar uma visão com
nomes dos Departamentos junto com o nome do Chefe e o total de
recursos de todos os projetos que coordena:
CREATE VIEW ProjetosXDptos(NomeProj, Orc, NomeCoord,
NomeDepto) AS
SELECT P.Nome, Orcamento, E.Nome, D.Nome CREATE VIEW DptosXRecursos (NomeDpto, NomeChefe,
FROM Projetos AS P, Empregados AS E, Departamentos AS D TotalRecursos) AS
WHERE (P.RGCoord = E.RG) and (P.CodDpto = D.Codigo) SELECT D.Nome, E.Nome, SUM(Orcamento)
FROM Projetos AS P, Empregados AS E, Departamentos AS D
WHERE (D.RGChefe = E.RG) and (P.CodDpto = D.Codigo)
GROUPBY CodDpto
Note-se a possibilidade de redefinir nomes dos atributos da visão
!!!ATENÇAO!!!! Nesta caso é necessária a redefinição de nomes

SQL - L. M. del Val Cura 7 SQL - L. M. del Val Cura 8

4
Visões utilizadas como relações Criação de visões
• Visões podem ser utilizadas como relações em novas • Um usuário entende uma visão como mais uma relação do BD
consultas. • A princípio o sistema cria a visão executando a consulta
Exemplo 1: “Fornecer nome dos departamentos que controlam recursos associada, toda vez que esta é utilizada. ==> EFICIÊNCIA
maiores que R$ 50,000.00”:

SELECT NomeDpto, TotalRecursos • Alguns SGDB permitem criar Visões materializadas. São
FROM DptosXRecursos mantidas como relações temporárias para garantir eficiência do
WHERE TotalRecursos > 500000
BD.

Exemplo 2: “Fornecer nome de cada projeto junto com o nome do chefe


do departamento que coordena esse projeto”: • Problema: O SGBD tem que garantir que modificações em
alguma das relações fonte da visão sejam refletidas na visão
SELECT NomeProj, NomeChefe
FROM DptosXRecursos, ProjetosXDptos materializada.
WHERE DptosXRecursos.NomeDepto = ProjetosXDptos.NomeDepto

SQL - L. M. del Val Cura 9 SQL - L. M. del Val Cura 10

5
Problemas na modificação de
Modificação de uma visão
uma visão
• O usuário perceve uma visão como uma outra • Ambigüidade na interpretação da modificação
relação do BD.
Exemplo: Inserir a tupla ( 2345645, Joao, M) na visão Segurados
• É desejável permitir operações de modificação
sobre a visão (inserção, remoção, atualização) CREATE VIEW Segurados AS
( SELECT RG, Nome, Sexo
• Modificação de uma visão devem ser refletidas FROM Empregados )
UNION
nas tabelas fonte. ( SELECT RG, Nome, Sexo
FROM Dependentes )
• Vários problemas limitam estas operações
• Em geral, SGBD só permitem modificações em Em qual tabela fonte é inserida a nova tupla ?
visões criadas a partir de uma única relação
fonte.
SQL - L. M. del Val Cura 11 SQL - L. M. del Val Cura 12

6
Problemas na modificação de Problemas na modificação de
uma visão uma visão
• Falta de atributos chave ou campos obrigatorios. • Problemas com atributos cálculados
Exemplo: Inserir a tupla (Projeto Apollo, 3434534, 30.000) na visão
Projetos2030. Exemplo: Modificar a tupla (Dpto.Pesquisa , Jõao, 30.000)
CREATE VIEW Projetos2030 AS
na visão DptosXRecursos para que o atributo
SELECT Nome, RGCoord, Orcamento TotalRecursos seja 50.000
FROM Projeto CREATE VIEW DptosXRecursos (NomeDpto, NomeChefe, TotalRecursos)
WHERE NumDpto = 2030 AS
Esta inserção deve ser refletida na relação Projeto SELECT D.Nome, E.Nome, SUM(Orcamento)
FROM Projetos AS P, Empregados AS E, Departamentos AS D
WHERE (D.RGChefe = E.RG) and (P.CodDpto = D.Codigo)
GROUPBY CodDpto
Qual valor associar ao atributo chave Num da nova
tupla a ser inserida na relação Projeto ??? Como modificar um atributo calculado?

SQL - L. M. del Val Cura 13 SQL - L. M. del Val Cura 14