E-Zine Exclusivo para o Whastapp

Entenda Views em SQL, vantagens e desvantagens

sql Entenda Views em SQL, vantagens e desvantagens
foto_ramos Entenda Views em SQL, vantagens e desvantagens

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.
foto_ramos Entenda Views em SQL, vantagens e desvantagens

Primeiro que é uma View em SQL

View é um resultado originado de uma consulta pré-definida. Essencialmente é um metadado que mapeia uma query para outra, por isto pode ser considerado como uma tabela virtual. Como o próprio nome diz, ela representa uma visão de dados e não contém dados. Com ela você tem a ilusão que está vendo uma tabela que não existe. Claro que o que você vê vê nesta tabela existe de outra forma no banco. Veja mais detalhes na Wikipedia.

Pode ajudar entender saber que elas também são chamadas de named queries ou stored queries. Não confundir query (consulta) com resultado. Ela é a query mesmo. É basicamente um texto de um SELECT. Pense que ela é uma query que você armazena em uma variável e ao invés de escrever toda a query de novo sempre que for necessária usa a variável. Claro que isto é uma grande simplificação para facilitar o entendimento, o funcionamento real é pouco mais complexo que isto mas não é importante aqui.

Elas não são carregadas, elas são geradas sempre que forem necessárias.

react_do_zero_ao_profissional Entenda Views em SQL, vantagens e desvantagens

Aprenda React do Zero ao Profissional

A não ser que a view seja materializada, aí você terá tabelas reais representando essas views. Mas a carga delas ocorrerão conforme a necessidade e otimizações do banco de dados. Só neste tipo de view é que os dados são atualizados quando as tabelas reais sofrem atualizações.

Mas é importante notar que mesmo em uma view não materializada existe a ilusão de que uma atualização da tabela real envolvida reflita na view, afinal a view é gerada no momento que ela é necessária. Essas tabelas virtuais são dinâmicas, elas só existem no momento em que você precisa delas. Somente a query para sua geração é pré-definida. Se um dado for atualizado logo em seguida uma view for acessada, essa atualização não será considerada neste momento, somente na próxima vez que a view for usada.

É bom entender que essa “tabela virtual” que é criada, não é bem uma tabela física criada em memória com todos os dados que você precisa. A view é apenas uma forma de traduzir uma query para outra query mais complexa. Mas uma otimização pode acabar tornando sim uma view comum em tabela física. Claro isto depende da implementação do DB.

Curso de PHP ERP com NFe.

Uma view é muito usada para ajudar dar entendimento do projeto lógico do banco de dados.

Exemplo:

Aqui vemos uma view criada para facilitar o acesso aos funcionários que são de Seattle que. Desta forma é possível acessar as informações mais importantes destes funcionários de forma consolidada em uma “tabela virtual” chamada SeattleOnly. Fazendo com que desta forma possuam todas as vantagens citadas abaixo.

 

Retirado do exemplo usando o banco AdventureWorks da Microsoft.

Exemplo de uso:

SELECT * FROM dbo.SeattleOnly WHERE LastName = 'Willians';

Note que retornará 4 colunas. No fundo isto é o mesmo que escrever:

 

Vantagens

  • Você pode usar este resultado em outras consultas diminuindo a complexidade, afinal você fará referência a uma tabela virtual montada fora desta consulta. De uma certa forma podemos considerar como syntax sugar para uma query. Você tem uma visão mais limitada dos dados sem grandes preocupações.
  • Estas consultas pré-definidas ficam armazenadas e você não precisa lembrar de como criá-las. Não confundir com resultados.
  • Como o próprio nome ajudam identificar elas permitem criar uma visão mais lógica para um humano entender a modelagem.
  • Facilita a troca do modelo físico sem o perigo de quebrar queries existentes.
  • Eventualmente o banco de dados pode fazer algumas otimizações por já ter conhecimento das queries utilizadas nas views. Mas normalmente isto depende até mais das estatísticas coletadas.
  • Você pode colocar permissões na view, ou seja, você pode proibir acesso à tabelas em seu estado bruto mas em uma certa condição, o usuário pode ter acesso à informação da forma como você definiu na view. Você controla melhor o que e como o usuário pode acessar a informação. Funciona como um firewall.
  • Regras de negócio podem ser adotadas nas views. A maneira como você vai acessar os dados está pré-definida. Isto é útil para formatar dados, ajudar ferramentas externas e facilitar o acesso via APIs. Pense em colunas computadas. Você pode usá-las como um proxy e realizar operações sempre que os dados sejam acessados.
  • Podem facilitar o acesso em base legada, tornando migrações e transições indolores.
  • Se a view for materializada pode ter ganho de performance para o acesso aos dados já “consolidados”.

Desavantagens

  • Esconde uma complexidade da query podendo enganar o desenvolvedor quanto à performance necessária para acessar determinada informação. E pode ser pior quando views usam outras views. Em alguns casos você pode estar fazendo consultas desnecessárias sem saber de forma muito intensiva.
  • Cria uma camada extra. mais objetos para administrar. Algumas pessoas consideram isto um aumento de complexidade. Uma outra forma de ver isto é que uma view pode ser mal usada.
  • Pode limitar exageradamente o que o usuário pode acessar impedindo certas tarefas.
  • Se a view for materializada fará com que alterações nas tabelas reais envolvidas sejam mais lentas afinal são mais tabelas para atualizar. Este tipo de view funciona de forma semelhante a um gatilho.

Existem alguns detalhes técnicos que podem trazer problemas mas acho que não é relevante para esta pergunta.

Diferença para Stored Procedure

Acho que já começa entrar em outra questão. Mas resumindo uma Stored Procedure permite mais flexibilidade para criar algoritmos mais complexos mas ela não cria uma tabela virtual. Como você vai lidar com isto para expor os dados e chamar uma Sproc é um problema do programador dela ou da query que vai usá-la.

Para finalizar: Exemplo e considerações

 

Temos umas tabela com preço e quantidade e quero saber o tal do “valor total” já vi muita gente me falando que colocar o valor total na tabela é justificável através da “desnormalização“, mas veja que não necessário e não recomendado colocar dados em uma tabela que você pode obte-los através de calculos, então a view pode entrar nesse caso para que o calculo seja obtido sem ele existir em tabela alguma, porque ele esta em uma view que podemos definir como uma consulta pré-definida ao B.D. ou uma tabela virtual.

Neste exemplo já esta respondido o item 1 e 2. Ref. ao 3 só é desvantagem se for mal utilizado, e a vantagem já esta no exemplo também.

E sempre que alguma das tabelas envolvidas/relacionadas a esta view sofrer uma atualização a view sofre de igual modo?

  • Sim pois a view é uma consulta a tabelas, se dados mudam o resultado da view também muda, ref. a ser carregadas quando o banco inicia, creio que isso pode depender do SGBD.

Eu vejo que a view é comumente usada por DBA’s para delimitar acesso, o DBA faz a regra do que determinado programa pode visualizar do seu banco usando a view e dando acesso ao programa apenas nessa parte onde lhe é permitido através dos privilégios, e as Stored Procedure são usadas mais para quando os dados precisam ser tratados de forma mais complexa.

curso_laravel_completo-e1496412117278 Entenda Views em SQL, vantagens e desvantagens

Aproveitando, segue nossa indicação:

Curso de Laravel – Plataforma EAD (LaraSchool), foi criado pelaEspecializaTi. Resumidamente: Neste curso você vai aprender a criar uma plataforma ead multi usuários, onde qualquer pessoa pode se cadastrar no sistema e postar cursos e comercializar e ainda aprenderá como integrar o Laravel com um dos gateways de pagamentos mais famosos que existem para produtos digitais, o HotMart. Espero que goste desta dica! 😉

Top
%d blogueiros gostam disto: