Você está na página 1de 36

Centro Universitrio Vila Velha - UVV

Curso de Bacharelado em C. da Computao

Disc.: BD II 2010/2

Prof. Sandro Tonini

Assunto:
VISES(VIEW)
VIEW Conceito e Criao
Uma visualizao, ou viso, uma tabela virtual ou lgica que permite a
visualizao e manipulao do contedo de uma ou mais tabelas.

Uma visualizao tem a aparncia e o funcionamento parecido com a de


uma tabela normal, s que as suas colunas podem ser oriundas de
diversas tabelas diferentes.

As tabelas que do origem s colunas so chamadas de tabelas-base.

OBS: geralmente montada dinamicamente, uma tabela virtual, mas pode existir
fisicamente, neste caso, uma viso materializada.
VIEW Objetivos
VIEW - Sintaxe
Definimos uma viso em SQL usando o comando create view.
view
Para definir a viso, precisamos dar-lhe um nome e definir a
consulta que processar essa viso.
A forma do comando create view :
create [or replace]
replace] view nome_view
as <expresso da consulta>
Onde:
<expresso da consulta> qualquer expresso de consulta vlida e o
nome da viso representado por v.

A opo or replace recria uma visualizao j existente.

Restries
No pode incluir instrues Order
Order By
By
No pode incluir instrues Into
Into
Into
View - exemplo
View exemplo (disponibilidade)

acessando a view

 A viso worsname est disponibilizada para um determinado usurio, tendo


o mesmo acesso total view, sem interferncias* de terceiros.
View exemplo (confidencialidade)
View exemplo (integridade)
Views de Tabelas Associadas
Exemplo: Uso mais comum
Views de Tabelas Associadas
Outro Exemplo
Create view Resumo_Vendas
(Cod_Venda, Vlr_Total,
Cod_Item, Cod_produto, Dcr_Produto,
Vlr_Produto, Qtde, Vlr_Total_Item)
As
select
v.cod_venda, v.vlr_total,
iv.cod_item, p.cod_produto, p.dcr_produto,
iv.vlr_produto, iv.qtde, iv.vlr_produto * iv.qtde
from
vnd_vendas as v, vnd_itens_vendas as iv, cad_produtos as p
where
v.cod_venda = iv.cod_venda
and iv.cod_produto = p.cod_produto
Perspectivas de Implementao de Views
Modificao de Consultas - QM
Materializao de Vises - VM
Vises Atualizveis

viso
Vises Atualizveis
Vises Atualizveis - Problemas
Vises Atualizveis Recomendaes
Vises Atualizveis Juno
Vises Atualizveis F. Agregao
Vises Atualizveis
SubConsultas com tabelas da Clusula FROM
Vises Atualizveis
DISTINCT
Vises Atualizveis - Condio
Alterando e Descartando Views

Substituindo consulta da view

Excluindo a view
Informaes sobre as views

Avaliar objetos de quem a view depende


Avaliar objetos que dependem da view

Sp_depends <nome da view>


Questes de segurana

Questes de Segurana
Se as tabelas de usurios diferentes
Permisso em cada um dos objetos

Se as tabelas de mesmo usurio


Apenas permisso na view

Prtica comum
Usurio dbo proprietrio de todos componentes
melhor para visibilidade tambm
Select * from clientes -- Proprietrio: dbo
Select * from maria.clientes -- Deve-se usar o proprietrio
Views Indexadas
Armazenam conjunto de resultados no banco de dados
Diretrizes para criao
A melhoria de desempenho compensa o custo de manuteno
O dados no so atualizados frequentemente
As consultas executam um conjunto considervel de associaes

Para criar, utilize um ndice UNIQUE CLUSTERED (exclusivo e


com agrupamento)
O SQL Server copia os dados para o ndice
Views Indexadas

Create unique index clustered IDX_TotalPurchaseView


on TotalPurchaseView (CustomerName, OrderID, Total)
Vantagens
Focar apenas dados importantes ou apropriados
No necessrio entender diversas tabelas em diversos pontos do banco de
dados
Mascarar a complexidade dos dados
Nomes de tabelas ficam mais amigveis e consultas complexas so mais
simples
Simplificar o gerenciamento de segurana
Voc oferece permisses na view sem a necessidade de gerenciar o acesso
em diversas tabelas
Melhorar desempenho
possvel criar ndices em views
Organizar dados para exportao
O terceiro acessa os dados por meio da view, sem a necessidade de
compreender a complexidade das tabelas no banco de dados
VIEW
Como exemplo, considere uma viso composta dos nomes de
agncias e nomes de clientes que tenham uma conta ou um
emprstimo na agncia. Suponha que desejamos que essa viso
seja denominada todos_clientes. Definimos essa viso como
segue:

create view todos_clientes as


( select nome_agencia, nome_cliente
from depositante, conta
where depositante.numero_conta = conta.numero_conta)
union
( select nome_agencia, nome_cliente
from devedor, emprestimo
where emprestimo.numero_emprestimo =
devedor.numero_emprestimo)
)
VIEW
Os nomes dos atributos de viso devem ser especificados
explicitamente, conforme segue:

create view emprestimo_total_agencia (nome_agencia,


emprestimo_total)
as
select nome_agencia, sum(saldo)
from emprestimo
group by nome_agencia
VIEW
Os nomes dos atributos de viso devem ser especificados
explicitamente, conforme segue:

create view emprestimo_total_agencia (nome_agencia,


emprestimo_total)
as
select nome_agencia, sum(saldo)
from emprestimo
group by nome_agencia

A viso anterior determina para cada agncia (nome_agncia) a soma


dos totais de todos os emprstimos da agncia.
Uma vez que a expresso soma(total) no possui nome, o nome do
atributo especificado explicitamente na definio da viso.
VIEW
Os nomes de viso podem aparecer em qualquer lugar onde o nome
de uma relao aparece. Usando a viso todos_clientes, podemos
encontrar todos os clientes da agncia Perryridge, escrevendo:

select nome_cliente
from todos_clientes
where nome_agencia = Perryridge
VIEW
Consultas complexas so mais fceis de escrever e entender se quebrarmos
em vises menores para depois combin-las, assim como estruturamos
programas por meio da diviso de suas tarefas em procedimentos.

Entretanto, ao contrrio da definio de um procedimento, a clusula create


view cria uma definio de viso em um banco de dados e essa definio fica
no banco at que um comando drop view nome_viso seja executado.
VIEW Atualizaes
A atualizao de uma viso mais complicada quando uma
viso definida em termos de diversas relaes. Como
resultado, muitos dos sistemas de banco de dados impem
algumas regras para alteraes por meio de vises:

Uma alterao por meio de viso somente permitida se a viso em questo


definida em termos de uma relao real do banco de dados isto , no nvel lgico
do banco de dados.

Devemos observar que:


1- Uma viso definida sobre uma nica tabela somente ser atualizvel se os
atributos da tal viso contiverem a chave primria de tal tabela.
2- Vises sobre vrias tabelas no so passveis de atualizaes.
3- Vises que se utilizam de funes de agrupamentos, tambm no podero ser
atualizadas.
VIEW com outra view
Uma view pode ser usada em uma expresso com outra view;

Uma view v1 dita depender diretamente na view v2 se v2


usada na expresso definindo v1

A view v1 dita depender na view v2 se ou v1 depende


diretamente de v2 ou existe um caminho de dependncia
de v1 to v2 ;

Uma view v dita recursiva se ela depende de si mesma.


VIEW Exemplos
Uma view pode ser usada em uma expresso com outra view;

Uma view v1 dita depender diretamente na view v2 se v2


usada na expresso definindo v1

A view v1 dita depender na view v2 se ou v1 depende


diretamente de v2 ou existe um caminho de dependncia
de v1 to v2 ;

Uma view v dita recursiva se ela depende de si mesma.

Você também pode gostar