A versão 5.0 do MySQL, liberada no
momento apenas para testes, introduz a implementação
do recurso de visão (VIEW) na linguagem
SQL deste servidor de banco de dados. Aproveitamos
este momento para discutir as vantagens da utilização
deste recurso, apresentando algumas facilidades
que poderão ser implementadas com a utilização
de visões.
Dentre as principais vantagens do uso de visões
podemos citar: controle de acesso, modificação
da apresentação dos dados, eliminação
de tabelas temporárias e auxílio
na modificação do esquema. Alguns
desenvolvedores têm receio de utilizar
visões por questões de desempenho.
Mostraremos também que, em uma boa implementação,
a perda de desempenho é insignificante.
Controle de Acesso
Vários Sistemas Gerenciadores de Banco
de Dados (SGBD) possibilitam que se defina pelos
comandos GRANT e REMOVE o direito de consulta
ou atualização de cada coluna
das tabelas armazenadas. Ou seja, os desenvolvedores
têm um controle preciso da tabela para
cortes verticais. Entretanto, o controle de
quais registros podem ser acessados só
pode ser implementado, de forma padrão,
com o uso de visões. Vejamos o exemplo
abaixo:
CREATE TABLE funcionario (
matricula int not
null,
nome varchar(40)
not null,
ramal int
not
null,
salário float
not null,
depto char(3)
not
null
)
GRANT SELECT (nome, ramal) ON funcionario TO
PUBLIC
CREATE VIEW func_eng AS
SELECT
* FROM funcionario WHERE depto = ‘ENG’
GRANT SELECT, UPDATE ON func_eng TO diretor_eng
O primeiro comando GRANT libera algumas colunas
para serem consultadas por qualquer usuário.
Mas apenas com o auxílio de uma visão,
que o segundo comando GRANT consegue liberar
o acesso para apenas alguns registros.
Modificação da Apresentação
Muitas vezes precisamos armazenar dados não
processados, embora a maioria dos usuários
só vá utilizar os dados depois
de algum processamento. Por exemplo, salário
base, gratificações, descontos,
horas extras precisam ser armazenados, embora
a maioria dos usuários precisará
acessar apenas o salário líquido.
Deixar a cargo de cada desenvolvedor a replicação
do cálculo, pode ser uma fonte de erros,
e com certeza será um problema na hora
de modificar a fórmula do cálculo.
Uma solução é deixar este
cálculo em uma visão.
CREATE VIEW salario_liquido AS
SELECT
matricula,
salario
+ gratificacao + hora_extra - IR - INSS as liquido
FROM funcionario
Outra utilização seria a formatação
de campos, de diferentes formas, de acordo com
a necessidade de diferentes usuários.
Tabelas Temporárias
Algumas consultas não podem ser feitas
em um só passo, como, por exemplo, aplicar
a função agregada de máximo
(MAX) sobre a função de soma (SUM).
Uma solução é criar uma
tabela temporária. Com o uso de visão,
não é necessário criar
esta tabela, e os dados estarão sempre
atualizados.
CREATE VIEW somatorio AS
SELECT
SUM(total) AS soma, estado
FROM
venda
GROUP
BY estado
SELECT MAX(soma) FROM somatorio
Este exemplo poderia ser feito em um só
passo com a cláusula HAVING, mas ele
ilustra bem o funcionamento que desejamos.
Modificação do Esquema
Ao implementar uma modificação
no esquema de um banco de dados, temos várias
atividades: criar o novo esquema, transferir
os dados, modificar as aplicações,
testar as aplicações. Se os usuários
não puderem esperar pela migração
de todas as aplicações, uma solução
seria “simular” o esquema antigo
através de visões, de forma que
as aplicações, que ainda não
tivessem sido modificadas, ainda pudessem ser
utilizadas.
Desempenho
Ao apresentar a disciplina Banco de Dados,
dizemos que a visão é “materializada”
no momento da consulta. Entretanto, as boas
implementações conseguem implementar
visões sem que seja necessário
fazer cópias dos dados. A consulta à
visão é resolvida sobre as próprias
tabelas originais, o que minimiza qualquer perda
de desempenho. Vejamos um exemplo clássico.
CREATE UNIQUE INDEX ix ON funcionario(nome)
CREATE VIEW visao AS SELECT nome, matricula
FROM funcionario
SELECT * FROM funcionario WHERE nome = 'joão
da silva'
SELECT * FROM visao WHERE nome = 'joão
da silva'
Utilizando um Microsoft SQL Server 7.0, com
100.000 registros carregados na tabela, o primeiro
SELECT é executado em um tempo que não
pôde ser medido, ou seja, menor que milésimos
de segundos. Entretanto, o segundo SELECT também
é executado instantaneamente, e ao se
analisar o plano de execução do
segundo SELECT, vemos que não só
a tabela original é utilizada, mas também
o índice “ix” desta tabela
é utilizado nesta consulta.
O funcionamento acima ocorre, pois, a visão
na verdade é armazenada como uma série
de operações fundamentais que
são baseadas em álgebra relacional.
Quando uma consulta que usa a visão é
compilada, as referências à visão
são substituídas por aquelas operações
que a representam.
Alguns SGBDs também permitem o uso de
visões que são materializadas
na hora da definição. O que as
vezes proporciona uma maior eficiência
nas consultas, ao custo de atualizar a visão
quando da modificação dos dados
nas tabelas originais.
Conclusão
Apresentamos algumas facilidades que podem
ser implementadas com o uso do recurso visão.
Também mostramos que, dependendo da implementação
do seu servidor de banco de dados, o uso de
visão não significa perda de eficiência.
Os usuário do MySQL que agora contarão
com este recurso, poderão usá-lo
e tirar suas próprias conclusões.
Referências
MySQL Reference Manual (versão 5.0.3-alpha)
Database Systems Concepts, Abraham Silberschatz,
Henry F. Korth, S. Sudarshan
SQL Fundamentos, John Patrick
Sistemas de Banco de Dados, Ramez E. Elmasri
e Shamkant Navate
SQL: Curso Prático, Celso H. Poderoso
de Oliveira
Curso de SQL – Exercícios e Notas
de Aula, Luiz Fernando P. Souza
|