Qual é um bom motivo para usar visualizações SQL?

98

Estou lendo a Bíblia do SQL Server 2008 e estou cobrindo a seção de visualizações. Mas o autor realmente não explica o propósito das visualizações. Qual é um bom uso para visualizações? Devo usá-los em meu site e quais são os benefícios deles?

Luke101
fonte
Você poderia me fornecer os arquivos de banco de dados desse livro "Bíblia do SQL Server 2008"? O site do autor está morto e não consigo entrar em contato com ele.

Respostas:

92

Outro uso que nenhuma das respostas anteriores parece ter mencionado é a implementação mais fácil de mudanças na estrutura da tabela.

Digamos que você queira desativar uma tabela ( T_OLD) contendo dados para usuários ativos e, em vez disso, usar uma nova tabela com dados semelhantes (nomeados T_NEW), mas que tenha dados para usuários ativos e inativos, com uma coluna extra active.

Se o (s) seu (s) sistema (s) tem zilhões de consultas que o fazem SELECT whatever FROM T_OLD WHERE whatever, você tem duas opções para a implementação:

1) Cold Turkey - Altere o DB e, ao mesmo tempo, altere, teste e libere várias partes do código que continham a referida consulta. MUITO difícil de fazer (ou mesmo coordenar), muito arriscado. Ruim.

2) Gradual - mude o banco de dados criando a T_NEWtabela, eliminando a T_OLDtabela e, em vez disso, criando uma VIEW chamada T_OLDque imita a T_OLDtabela 100% (por exemplo, a consulta da visão é SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Isso permitiria que você evitasse a liberação de QUALQUER código que atualmente selecione de T_OLDe faça as alterações para migrar o código T_OLDà T_NEWvontade.

Este é um exemplo simples, existem outros muito mais envolvidos.

PS Por outro lado, você provavelmente deveria ter uma API de procedimento armazenado em vez de consultas diretas de T_OLD, mas nem sempre é o caso.

DVK
fonte
3
Eu não conhecia o termo "API de procedimento armazenado" e os prós / contras associados e achei este artigo útil: codinghorror.com/blog/2005/05/…
Jeff Widman
Desculpe pelo atraso na festa, mas e quanto ao desempenho. Se eu precisar de junções na tabela original e, em vez disso, me juntar à Visualização, ele usará o melhor plano de execução?
Zikato
@Zikato sim, se for uma visualização indexada
LinkBerest
V Good Indication
Afnan Ahmad
47

(Copiado do primeiro tutorial que surgiu em uma pesquisa do Google (link agora morto), mas tem todos os benefícios que eu mesmo teria digitado manualmente.)

As visualizações têm os seguintes benefícios:

  • Segurança - as visualizações podem ser tornadas acessíveis aos usuários, enquanto as tabelas subjacentes não estão diretamente acessíveis. Isso permite que o DBA forneça aos usuários apenas os dados de que precisam, ao mesmo tempo que protege outros dados na mesma tabela.
  • Simplicidade - as visualizações podem ser usadas para ocultar e reutilizar consultas complexas.
  • Simplicação ou esclarecimento do nome da coluna - as visualizações podem ser usadas para fornecer aliases nos nomes das colunas para torná-los mais memoráveis ​​e / ou significativos.
  • Stepping Stone - As visualizações podem fornecer um ponto de partida em uma consulta "multinível". Por exemplo, você pode criar uma visualização de uma consulta que contasse o número de vendas que cada vendedor realizou. Em seguida, você pode consultar essa exibição para agrupar os vendedores pelo número de vendas que realizaram.
David
fonte
Como gostei da sua resposta e não vejo muito sentido em adicionar outra, posso sugerir dois acréscimos à sua lista? Visualizações indexadas podem aumentar o desempenho. Executar atualizações nas visualizações em vez de direcionar às tabelas pode dar mais confiança de que você não atualizará incorretamente a tabela de produção principal :)
David Hall,
Mais um ponto em sua lista, a maioria dos DBA's gostaria de usar a view porque eles podem ajustar uma view e a maioria (nem sempre) de todas as consultas usando aquela view serão ajustadas.
Nitin Midha
Esta é a resposta de 99% no meu livro.
John Steedman,
BTW @David link quebrado
Manuel Jordan
O último ponto, não podemos usar uma mesa temporária para isso?
Jiechao Wang
16

Algumas razões da Wikipedia :

As visualizações podem oferecer vantagens sobre as tabelas:

  1. As visualizações podem representar um subconjunto dos dados contidos em uma tabela
  2. As visualizações podem unir e simplificar várias tabelas em uma única mesa virtual
  3. As visualizações podem atuar como tabelas agregadas , onde o mecanismo de banco de dados agrega dados (soma, média etc) e apresenta os resultados calculados como parte dos dados
  4. As visualizações podem ocultar a complexidade dos dados ; por exemplo, uma exibição pode aparecer como Sales2000 ou Sales2001, particionando de forma transparente a tabela subjacente real
  5. As vistas ocupam muito pouco espaço para armazenar ; o banco de dados contém apenas a definição de uma visão, não uma cópia de todos os dados que apresenta
  6. Dependendo do mecanismo SQL usado, as visualizações podem fornecer segurança extra
  7. As visualizações podem limitar o grau de exposição de uma mesa ou mesas ao mundo exterior
user210748
fonte
14

VIEWS pode ser usado como seções reutilizáveis ​​de SELECT / CODE, que podem ser incluídas em outros selects / queries a serem unidos, e usar vários filtros diferentes, sem ter que recriar todo o SELECT todas as vezes.

Isso também coloca a lógica em um único local, para que você não precise alterá-la em toda a base de código.

Dê uma olhada em

Escolha entre procedimentos armazenados, funções, visualizações, gatilhos, SQL embutido

A principal beleza de uma visualização é que ela pode ser usada como uma tabela na maioria das situações, mas, ao contrário de uma tabela, pode encapsular cálculos muito complexos e junções comumente usadas. Ele também pode usar praticamente qualquer objeto no banco de dados, exceto para procedimentos armazenados. As visualizações são mais úteis quando você sempre precisa juntar o mesmo conjunto de tabelas, digamos, um pedido com um detalhe do pedido para obter campos de cálculo de resumo, etc.

Adriaan Stander
fonte
6
Tenha muito cuidado ao fazer isso. Se você usar visualizações que chamam outras visualizações, poderá criar uma grande confusão de desempenho.
HLGEM
10

Uma visão é uma camada de abstração e faz o que qualquer boa camada de abstração faz, incluindo encapsular o esquema do banco de dados e protegê-lo das consequências de alterar os detalhes de implementação internos.

É uma interface.

dkretz
fonte
1
Contanto que você não empilhe visualizações em visualizações para abstração adicional.
HLGEM
Acho que repudiei efetivamente qualquer tipo de abstração multinível em bancos de dados relacionais. E também não chamo stored procedures a partir de stored procedures. :)
dkretz
3

Aqui está um uso muito comum de usar visualizações para restringir uma entidade por alguns critérios.

Tabela: USERS contém todos os usuários

Visualização: ACTIVE_USERS contém todos os usuários, exceto aqueles que estão suspensos, banidos, aguardando para serem ativados e não atendem a nenhum critério que você possa escolher definir no futuro como parte dos requisitos ativos. Isso torna desnecessário excluir quaisquer linhas da tabela USERS caso você opte por não fazê-lo, porque ACTIVE_USERS sempre pode ocultar as linhas indesejadas.

Desta forma, você pode usar a tabela em suas páginas de gerenciamento de usuário, mas o resto do aplicativo pode usar ACTIVE_USERS, pois eles podem ser os únicos usuários que devem ser capazes de executar processos e acessar / modificar dados.

Nefsu
fonte
2

As visualizações podem permitir combinar dados de várias tabelas diferentes e formatá-los (combinar campos, fornecer nomes de campo mais significativos, etc.) para que seja mais fácil para os usuários finais. Eles são uma abstração do modelo de banco de dados. Eles também podem ser usados ​​para fornecer aos usuários acesso aos dados da tabela sem fornecer acesso direto à própria tabela.

TLiebe
fonte
2

Aqui estão algumas das muitas razões para usar view em vez de tabela diretamente

  • Simplicidade - visualizações podem ser usadas para ocultar consultas complexas.
  • Segurança - A visão pode ocultar algumas informações importantes do usuário final, criando uma visão em algumas colunas selecionadas
  • Segurança - Tabela segura para mudar a estrutura dela usando VIEW.
  • Redundância - reduz o código redundante em todos os procedimentos / consultas usando uma visão comum.
  • Cálculo - Todos os cálculos podem ser feitos uma vez na consulta de visualização.
  • Nome significativo - a tabela pode ter um nome para id como tbl_org_emp_id, que pode ser um alias como [Nº do funcionário] ou algum nome significativo.

De imexploring.com

Ali Adravi
fonte
1

Uma pequena lista de motivos / usos comuns:

  • use-os para alterar o formato ou 'aparência' dos dados (ou seja, você pode juntar o nome e o sobrenome)

    realizar cálculos ou outras pesquisas nos dados

    desnormalizar dados (extrair dados de várias tabelas em um local)

slugster
fonte
-6

Os pontos de vista são maus! Evite-os se possível e use apenas pelo motivo mencionado por DVK - migração temporária de dados.

Você deve entender que em um banco de dados com 100 tabelas é difícil lembrar o propósito de cada tabela. Agora, se você adicionar aqui outras 300 visualizações, isso se tornará uma bagunça completa. Então, os 'amantes da visualização' tendem a usar visualizações aninhadas e, em seguida, usam as visualizações aninhadas em procedimentos armazenados. Eu pessoalmente trabalho agora com um banco de dados onde existem Views aninhadas em profundidade 4 vezes! Portanto, para entender a lógica mais simples de um procedimento armazenado, primeiro preciso passar por todas as visualizações.

Dan
fonte
8
-1 As vistas são boas. Eles podem se tornar maus se você os usar de forma inadequada - mas isso é verdade sobre qualquer coisa.
NullUserException
1
As visualizações podem ser más se mal usadas. As pessoas que os usam com mais frequência parecem ser aqueles que os usam para abstrair coisas e, em seguida, fazem o que você diz, chamam de visualizações que chamam de visualizações a um ponto em que você pode precisar materializar 10 milhões de recrods antes de retornar um resultado conjunto de 3. Visualizações que chamam diretamente as tabelas podem ser muito úteis.
HLGEM
@HGLEM existe uma maneira de restringir chamadas de visualização de outras visualizações?
Igor Soloydenko