Estou apenas tentando ter uma ideia geral de como as visualizações são usadas nos RDBMSs. Quer dizer, eu sei o que é uma vista e como fazer uma. Também sei para que os usei no passado.
Mas eu quero ter certeza de que tenho um entendimento completo de para que uma visão é útil e para que não deve ser útil. Mais especificamente:
- Para que serve uma visualização?
- Existem situações em que é tentador usar uma visualização quando você não deveria usá-la?
- Por que você usaria uma visão em vez de algo como uma função com valor de tabela ou vice-versa?
- Existem circunstâncias em que uma exibição pode ser útil que não são aparentes à primeira vista?
(E para que fique registrado, algumas dessas perguntas são intencionalmente ingênuas. Isso é em parte uma verificação de conceito.)
sql
views
rdbms-agnostic
Jason Baker
fonte
fonte
Respostas:
1) Para que serve uma visualização?
2) Existem situações em que é tentador usar uma visualização quando você não deveria usá-la?
3) Por que você usaria uma visão em vez de algo como uma função com valor de tabela ou vice-versa?
4) Existem circunstâncias em que uma exibição pode ser útil que não são aparentes à primeira vista?
fonte
De certa forma, uma visualização é como uma interface. Você pode alterar a estrutura da tabela subjacente o quanto quiser, mas a visão fornece uma maneira para que o código não precise ser alterado.
As visualizações são uma boa maneira de fornecer algo simples para os redatores de relatórios. Se seus usuários de negócios desejam acessar os dados de algo como Crystal Reports, você pode dar a eles algumas visualizações em suas contas que simplificam os dados - talvez até desnormalizem para eles.
fonte
As visualizações podem ser usadas para fornecer segurança (ou seja: os usuários podem ter acesso a visualizações que acessam apenas certas colunas em uma tabela), as visualizações podem fornecer segurança adicional para atualizações, inserções, etc. As visualizações também fornecem uma maneira de nomes de colunas de alias (como fazem sp's), mas as visualizações são mais um isolamento da tabela real.
fonte
Em certo sentido, as visualizações desnormalizam-se. A desnormalização às vezes é necessária para fornecer dados de uma maneira mais significativa. Isso é o que muitos aplicativos fazem por meio da modelagem de domínio em seus objetos. Eles ajudam a apresentar os dados de uma forma que corresponda mais de perto à perspectiva de uma empresa.
fonte
Além do que os outros declararam, as visualizações também podem ser úteis para remover consultas SQL mais complicadas do aplicativo.
Por exemplo, em vez de em um aplicativo fazendo:
Você poderia abstrair isso para uma visualização:
e no código do aplicativo, basta ter:
Além disso, se as estruturas de dados mudarem, você não terá que alterar o código do aplicativo, recompilar e reimplantar. você apenas mudaria a visualização no banco de dados.
fonte
As visualizações ocultam a complexidade do banco de dados. Eles são ótimos por vários motivos e são úteis em muitas situações, mas se você tiver usuários que têm permissão para escrever suas próprias consultas e relatórios, você pode usá-los como uma proteção para se certificar de que não enviem mal planejados consultas com junções cartesianas desagradáveis que derrubam seu servidor de banco de dados.
fonte
O OP perguntou se havia situações em que poderia ser tentador usar uma visualização, mas não é apropriado.
O que você não deseja usar para uma visualização é um substituto para junções complexas. Ou seja, não deixe seu hábito de programação procedural de quebrar um problema em partes menores levá-lo a usar várias visualizações unidas em vez de uma união maior. Fazer isso acabará com a eficiência do mecanismo de banco de dados, pois ele basicamente faz várias consultas separadas, em vez de uma maior.
Por exemplo, digamos que você precise juntar as tabelas A, B, C e D. Você pode ficar tentado a fazer uma visualização das tabelas A e B e uma visualização das tabelas C e D e, em seguida, unir as duas visualizações. É muito melhor apenas juntar A, B, C e D em uma consulta.
fonte
As visualizações podem centralizar ou consolidar dados. Onde estou, temos vários bancos de dados diferentes em alguns servidores vinculados diferentes. Cada banco de dados contém dados para um aplicativo diferente. Alguns desses bancos de dados contêm informações que são relevantes para vários aplicativos diferentes. O que faremos nessas circunstâncias é criar uma visualização no banco de dados desse aplicativo que apenas extraia dados do banco de dados onde os dados estão realmente armazenados, de forma que as consultas que escrevemos não pareçam estar passando por bancos de dados diferentes.
fonte
As respostas até agora estão corretas - as visualizações são boas para fornecer segurança, desnormalização (embora haja muita dor nesse caminho se for feito de maneira errada), abstração do modelo de dados, etc.
Além disso, as visualizações são comumente usadas para implementar a lógica de negócios (um usuário prescrito é aquele que não efetuou login nos últimos 40 dias, esse tipo de coisa).
fonte
As visualizações salvam muitas instruções JOIN complexas repetidas em seus scripts SQL. Você pode apenas encapsular algum JOIN complexo em alguma visão e chamá-lo em sua instrução SELECT sempre que necessário. Isso às vezes seria útil, direto e mais fácil do que escrever as instruções de junção em cada consulta.
fonte
Uma visão é simplesmente uma instrução SELECT armazenada e denominada. Pense em visualizações como funções de biblioteca.
fonte
Eu queria destacar o uso de visualizações para relatórios. Freqüentemente, há um conflito entre normalizar as tabelas do banco de dados para acelerar o desempenho, especialmente para editar e inserir dados (usos OLTP), e desnormalizar para reduzir o número de junções de tabelas para consultas para relatórios e análises (usos OLAP). Por necessidade, o OLTP geralmente vence, porque a entrada de dados deve ter um desempenho ideal. A criação de visualizações, portanto, para um desempenho de relatório ideal, pode ajudar a satisfazer ambas as classes de usuários (entrada de dados e visualizadores de relatório).
fonte
Lembro-me de um SELECT muito longo que envolveu vários UNIONs. Cada UNION incluía uma junção a uma tabela de preços que foi criada instantaneamente por um SELECT que era bastante longo e difícil de entender. Acho que teria sido uma boa ideia ter uma vista assim para criar a tabela de preços. Isso teria encurtado o SELECT geral pela metade.
Não sei se o banco de dados avaliaria a visão uma vez, ou uma vez a cada vez que fosse invocado. Ninguem sabe? No primeiro caso, o uso de uma visualização melhoraria o desempenho.
fonte
Sempre que você precisar de [my_interface]! = [User_interface].
Exemplo:
TABELA A:
VER para a TABELA A:
esta é uma maneira de ocultar o id do cliente e renomear as informações para um nome mais prolixo ao mesmo tempo.
A visão usará o índice subjacente para a id da chave primária, então você não verá uma perda de desempenho, apenas uma melhor abstração da consulta selecionada.
fonte