Quando usar uma Visualização em vez de uma Tabela?

108

Quando uma Visualização deve realmente ser usada sobre uma Tabela real? Que ganhos devo esperar que isso produza?

No geral, quais são as vantagens de usar uma visualização sobre uma mesa? Eu não deveria projetar a tabela da maneira que a vista deveria parecer em primeiro lugar?

bevacqua
fonte

Respostas:

80

Oh, existem muitas diferenças que você precisa considerar

Vistas para seleção:

  1. As visualizações fornecem abstração sobre as tabelas. Você pode adicionar / remover campos facilmente em uma visão sem modificar seu esquema subjacente
  2. As visualizações podem modelar junções complexas facilmente.
  3. As visualizações podem ocultar coisas específicas do banco de dados de você. Por exemplo, se você precisa fazer algumas verificações usando a função SYS_CONTEXT do Oracles ou muitas outras coisas
  4. Você pode gerenciar facilmente seus GRANTS diretamente nas visualizações, ao invés das tabelas reais. É mais fácil de gerenciar se você souber que um determinado usuário pode acessar apenas uma visualização.
  5. Visualizações podem ajudá-lo com compatibilidade com versões anteriores. Você pode alterar o esquema subjacente, mas as visualizações podem ocultar esses fatos de um determinado cliente.

Visualizações para inserção / atualizações:

  1. Você pode lidar com problemas de segurança com visualizações usando funcionalidades como a cláusula "WITH CHECK OPTION" do Oracle diretamente na visualização

Inconvenientes

  1. Você perde informações sobre relações (chaves primárias, chaves estrangeiras)
  2. Não é óbvio se você será capaz de inserir / atualizar uma visão, porque a visão esconde suas junções subjacentes de você
Lukas Eder
fonte
3
Pergunta rápida: as visualizações são "permanentes" ou duram apenas a duração da sessão? Razão pela qual pergunto: temos um sistema que às vezes falha no meio de uma longa execução de código. Eu atenuo isso dividindo partes do código em tabelas intermediárias que salvam os resultados intermediários. Portanto, se o sistema conks antes que o código seja concluído, eu só tenho que começar a partir da última tabela temporária salva. Posso passar a usar visualizações se elas oferecerem a mesma permanência. Caso contrário, continuarei fazendo o mesmo e diminuindo a temperatura no final da corrida. THX!
ouonomos
8
@ouonomos: Uma visão normal não contém nenhum dado. É apenas uma instrução SQL armazenada, ou seja, uma visão dos dados subjacentes. Alguns bancos de dados (por exemplo, Oracle, PostgreSQL) suportam visualizações materializadas, que armazenam a "visualização" temporariamente em outra tabela para acesso mais rápido. Isso é feito para acelerar o acesso de leitura quando a visualização é complexa. Mas isso não o ajuda no seu caso, porque uma visão materializada ainda é uma visão, não dados por si só. Sua abordagem provavelmente está OK.
Lukas Eder
44

As visualizações podem:

  • Simplifique uma estrutura de tabela complexa
  • Simplifique o seu modelo de segurança, permitindo que você filtre dados confidenciais e atribua permissões de uma forma mais simples
  • Permite que você altere a lógica e o comportamento sem alterar a estrutura de saída (a saída permanece a mesma, mas o SELECT subjacente pode mudar significativamente)
  • Aumente o desempenho (exibições indexadas do Sql Server)
  • Oferece otimização de consulta específica com a visão que pode ser difícil de obter de outra forma

E você não deve projetar tabelas para corresponder às visualizações . Seu modelo básico deve se preocupar com o armazenamento e recuperação eficientes dos dados. As visualizações são, em parte, uma ferramenta que atenua as complexidades que surgem de um modelo normalizado eficiente, permitindo que você abstraia essa complexidade.

Além disso, perguntar "quais são as vantagens de usar uma visualização sobre uma mesa?" Não é uma boa comparação. Você não pode ficar sem tabelas, mas pode ficar sem visualizações. Cada um deles existe por uma razão muito diferente. As tabelas são o modelo concreto e as Visualizações são uma Visualização bem abstrata.

Paul Sasik
fonte
1
As visualizações +1 são parcialmente uma ferramenta que atenua as complexidades que surgem de um modelo normalizado eficiente, permitindo que você abstraia essa complexidade.
metdos de
34

As visualizações são aceitáveis ​​quando você precisa garantir que uma lógica complexa seja sempre seguida. Por exemplo, temos uma visão que cria os dados brutos necessários para todos os relatórios financeiros. Ao fazer com que todos os relatórios usem essa visualização, todos estão trabalhando a partir do mesmo conjunto de dados, em vez de um relatório usando um conjunto de junções e outro esquecendo de usar um que fornece resultados diferentes.

As visualizações são aceitáveis ​​quando você deseja restringir os usuários a um subconjunto específico de dados. Por exemplo, se você não excluir registros, mas apenas marcar o atual como ativo e as versões anteriores como inativas, você deseja que uma visualização seja usada para selecionar apenas os registros ativos. Isso evita que as pessoas se esqueçam de colocar a cláusula where na consulta e obtenham resultados ruins.

As visualizações podem ser usadas para garantir que os usuários tenham acesso apenas a um conjunto de registros - por exemplo, uma visualização das tabelas para um cliente específico e nenhum direito de segurança nas tabelas pode significar que os usuários desse cliente só podem ver os dados para esse cliente.

As visualizações são muito úteis ao refatorar bancos de dados.

As visualizações não são aceitáveis ​​quando você usa visualizações para chamar visualizações que podem resultar em um desempenho horrível (pelo menos no SQL Server). Quase perdemos um cliente multimilionário porque alguém optou por abstrair o banco de dados dessa forma e o desempenho era horrível e os tempos de espera eram frequentes. Tínhamos que pagar pela correção também, não o cliente, pois o problema de desempenho era totalmente nossa culpa. Quando as visualizações chamam as visualizações, elas precisam gerar completamente a visualização subjacente. Eu vi isso onde a visão chamada de visão que chamou de visão e tantos milhões de registros foram gerados para ver os três que o usuário precisava. Lembro-me de que uma dessas visualizações demorou 8 minutos para fazer uma contagem simples (*) dos registros. Visualizações chamando visualizações são uma ideia extremamente pobre.

Geralmente, as visualizações são uma má ideia para atualizar registros, pois geralmente você só pode atualizar campos da mesma tabela (novamente, este é o SQL Server, outros bancos de dados podem variar). Se for esse o caso, faz mais sentido atualizar diretamente as tabelas de qualquer maneira para que você saiba quais campos estão disponíveis.

HLGEM
fonte
1
Não sabia que havia um problema de desempenho com o modo de exibição de chamada. Isso parece estranho. Isso não é tratado corretamente pelo otimizador de consulta? Qual versão do SQL Server foi usada no seu caso?
Patrick Honorez
7

As visualizações são úteis quando você precisa selecionar entre várias tabelas ou apenas obter um subconjunto de uma tabela.

Você deve projetar suas tabelas de forma que seu banco de dados seja bem normalizado (duplicação mínima). Isso pode tornar a consulta um pouco difícil.

As visualizações são um pouco separadas, permitindo que você visualize os dados nas tabelas de forma diferente daquela que estão armazenados.

Oded
fonte
7

Uma prática comum é ocultar junções em uma exibição para apresentar ao usuário um modelo de dados mais desnormalizado. Outros usos envolvem segurança (por exemplo, ocultando certas colunas e / ou linhas) ou desempenho (no caso de visualizações materializadas)

TToni
fonte
6

Você deve projetar sua tabela SEM considerar as visualizações.
Além de salvar associações e condições, as exibições têm uma vantagem de desempenho: o SQL Server pode calcular e salvar seu plano de execução na exibição e, portanto, torná-lo mais rápido do que as instruções SQL "dinâmicas".
O modo de exibição também pode facilitar seu trabalho em relação ao acesso do usuário no nível do campo.

Patrick Honorez
fonte
5

Em primeiro lugar, como o nome sugere, uma visão é imutável. isso porque uma visão nada mais é do que uma tabela virtual criada a partir de uma consulta armazenada no banco de dados. Por isso, você tem algumas características de visualizações:

  • você pode mostrar apenas um subconjunto dos dados
  • você pode juntar várias tabelas em uma única visualização
  • você pode agregar dados em uma vista (selecione a contagem)
  • view não contém dados, eles não precisam de nenhum espaço de tabela, pois são agregações virtuais de tabelas subjacentes

portanto, há um zilhão de casos de uso para os quais as visualizações são mais adequadas do que as tabelas, basta pensar em exibir apenas usuários ativos em um site. uma visualização seria melhor porque você opera apenas em um subconjunto dos dados que realmente estão em seu banco de dados (usuários ativos e inativos)

confira este artigo

espero que isso tenha ajudado ..

fasseg
fonte
2

De acordo com a Wikipedia ,

As visualizações podem fornecer muitas vantagens sobre as tabelas:

  • As visualizações podem representar um subconjunto dos dados contidos em uma tabela.
  • As visualizações podem limitar o grau de exposição das tabelas subjacentes ao mundo externo: um determinado usuário pode ter permissão para consultar a visualização, enquanto o acesso ao resto da tabela base é negado.

  • As visualizações podem juntar e simplificar várias tabelas em uma única mesa virtual.

  • 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.

  • 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.

  • 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.

  • As visualizações podem fornecer segurança extra , dependendo do mecanismo SQL usado.

Loukan ElKadi
fonte