descadastro
site NCE
 
 
Banco de Dados
 
artigos publicados

O Recurso Visão na Linguagem SQL

 


Luiz Fernando Pereira de Souza, M.Sc.
Analista de Sistemas, NCE/UFRJ

 

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


   
 
         
 
    página principal
 
Núcleo de Computação Eletrônica
Universidade Federal do Rio de Janeiro
Prédio do Centro de Ciências Matemáticas e da Natureza Bloco C
Caixa Postal: 2324 - CEP: 20.010-974
Cidade Universitária - Ilha do Fundão, Rio de Janeiro - RJ Tel: 2598-3333