Pergunta

Eu estou apenas tentando obter uma ideia geral do que pontos de vista são usadas no RDBMSes. Ou seja, eu sei o que é um ponto de vista é e como fazer um. Sei também que eu usei-los no passado.

Mas eu quero ter certeza que tenho uma compreensão completa do que a vista é útil para e que vista não deve ser útil para. Mais especificamente:

  1. O que é uma visão útil para?
    • Existem situações em que é tentador usar um ponto de vista quando você não deve usar um?
    • Por que você usaria uma visão em vez de algo como uma função com valor de tabela ou vice-versa?
    • Existem quaisquer circunstâncias que a visão pode ser útil que não são aparentes à primeira vista?

(E para o registro, algumas destas questões são intencionalmente ingênuos. Isto é em parte uma verificação de conceito.)

Foi útil?

Solução

1) O que é uma visão útil para?

IOPO Em um único lugar
• Se você considerar os dados em si ou as consultas que fazem referência as tabelas associadas, utilizando uma visão evita a redundância desnecessária.
• Vistas também fornecer uma camada abstraindo impedindo o acesso direto às tabelas (e as dependências físicas resultando algemar referenciando). Na verdade, eu acho que é boas práticas 1 para oferecer acesso apenas abstraído aos seus dados subjacentes (usando visualizações e funções com valor de tabela), incluindo vistas como
< br> CREATE VIEW AS
      SELECT * FROM tblData

1 I hafta admitir que há uma boa dose de "faça o que eu digo, não como eu faço", em que o conselho;)

2) Existem situações em que é tentador usar um ponto de vista quando você não deve usar um?

Performance em vista junta costumava ser uma preocupação (por exemplo, SQL 2000). Não sou especialista, mas eu não ter se preocupado sobre isso há algum tempo. (Nem posso pensar de onde eu estou usando no momento vista junta.)
Outra situação em que uma visão pode ser um exagero é quando a vista só é referenciado a partir de um local chamado e uma tabela derivada pode ser usada. Assim como um tipo anônimo é preferível a uma classe em .NET se o tipo anônimo é usado apenas / referenciados uma vez.
• Ver a descrição tabela derivada em http://msdn.microsoft.com/en-us /library/ms177634.aspx

3) Por que você usaria uma vista, em vez de algo como uma função com valor de tabela ou vice-versa?

função (Além dos motivos de desempenho) Um valor de tabela é funcionalmente equivalente a uma vista com parâmetros. Na verdade, um caso de uso função com valor de tabela simples comum é simplesmente adicionar um WHERE filtro cláusula para uma visão já existente em um único objeto.

4) Existe alguma circunstância que uma visão pode ser útil que não são aparentes à primeira vista?

eu não posso pensar de quaisquer usos não-aparentes do topo da minha cabeça. (Suponho que se eu pudesse, que os faria aparente;)

Outras dicas

De certa forma, a vista é como uma interface. Você pode alterar a estrutura da tabela subjacente tudo o que quiser, mas a vista dá uma maneira para que o código não tem que mudar.

As vistas são uma boa maneira de fornecer algo simples para escritores de relatório. Se os usuários de negócios quer para acessar os dados a partir de algo como o Crystal Reports, você pode dar-lhes alguns pontos de vista em sua conta que simplificam os dados -. Talvez até desnormalizar-lo para eles

Views podem ser usados ??para fornecer segurança (ou seja: os usuários podem ter acesso a pontos de vista que só acessam determinadas colunas de uma tabela), pontos de vista podem fornecer segurança adicional para atualizações, inserções, etc. Views também fornecem uma maneira de nomes de coluna de alias (como fazem sp do), mas vistas são mais de um isolamento da tabela real.

Em um sentido visualizações desnormalizar. Desnormalização às vezes é necessário para fornecer dados de forma mais significativa. Isto é o que um monte de aplicativos fazer de qualquer maneira por meio de modelagem de domínio em seus objetos. Eles ajudam a apresentar os dados de uma forma que corresponda melhor um negócio perspectiva.

Vistas ocultar a complexidade do banco de dados. Eles são ótimos para uma série de razões 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 salvaguarda para garantir que eles não apresentarem mal projetado consultas com cartesiano desagradável junta que derrubar seu servidor de banco de dados.

Além do que os outros declarou, pontos de vista também pode ser útil para a remoção de consultas SQL mais complecated da aplicação.

Por exemplo, em vez de em um aplicativo fazendo:

sql = "SELECT a, b da união table1 selecionar, um b de table2" ;

Você poderia abstrato que a uma visão:

create view union_table1_table2_v como
selecionar, a b da tabela1
união
selecionar, um b de table2

e no código de aplicativo, basta ter:

sql = "SELECT a, b de union_table1_table2_v";

Além disso, se as estruturas de dados que nunca mudam, você não terá que mudar o código do aplicativo, recompilação e redeploy. você apenas alterar a vista no db.

O OP perguntou se havia situações em que pode ser tentador usar um ponto de vista, mas não é apropriado.

O que você não quer usar uma vista para é um substituto para junta-se complexa. Isto é, não deixe que o seu hábito de programação processual de quebrar um problema em pedaços menores levá-lo para a utilização de várias vistas juntas em vez de um maior aderir. Se o fizer, vai matar a eficiência do motor de banco de dados, já que é essencialmente fazer várias consultas separadas em vez de um maior.

Por exemplo, digamos que você tem que juntar tabelas A, B, C, e D juntos. Você pode ser tentado a fazer uma vista de mesas A & B e uma vista de C & D, em seguida, juntar as duas visões juntos. É muito melhor para apenas juntar-se A, B, C e D em uma consulta.

As visualizações podem centralização ou a consolidação de dados. Onde eu estou, temos um número de bancos de dados diferentes em um servidores casal diferente vinculados. Cada banco de dados contém dados para uma aplicação diferente. A par desses bancos de dados armazenar informações que são relavent a uma série de diferentes aplicações. O que vamos fazer nessas circunstâncias é criar uma exibição no banco de dados que o aplicativo que só puxa os dados do banco de dados onde os dados são realmente armazenados, de modo que as consultas que escrevemos não se parecem com eles estão indo através de diferentes bases de dados.

As respostas até agora estão corretos - vistas são bons para fornecer segurança, desnormalização (embora haja muita dor por esse caminho se feito errado), modelo de dados abstração, etc

.

Além disso, pontos de vista são comumente usados ??para implementar a lógica de negócio (um usuário decorrido é um usuário que não tenha logado nos últimos 40 dias, esse tipo de coisa).

Visualizações economizar muito repetido complexo instruções JOIN em seus scripts SQL. Você pode apenas encapsular algum complexo JOIN em alguns vista e chamá-lo em sua instrução SELECT sempre que necessário. Isto, às vezes, ser útil, para a frente e mais fácil do que escrever a declarações em cada consulta de junção.

A vista é simplesmente um armazenado, chamado instrução SELECT. Pense vistas como funções de biblioteca.

Eu queria destacar o uso de pontos de vista para relatar. Muitas vezes, há um conflito entre normalizar as tabelas de banco de dados para acelerar o desempenho, especialmente para a edição e inserção de dados (usos OLTP), e desnormalizar para reduzir o número de junções de tabela para consultas para relatórios e análise (OLAP usos). Por necessidade, OLTP geralmente ganha, porque a entrada de dados deve ter um ótimo desempenho. Criação de pontos de vista, então, para um desempenho ideal em análise, pode ajudar a satisfazer ambas as classes de usuários (de entrada de dados e visualizadores de relatórios).

Lembro-me de um tempo muito longo SELECIONE que envolveu vários sindicatos. Cada União incluiu uma junção a uma tabela de preços que foi criado na mosca por um SELECT que em si era bastante longo e difícil de entender. Eu acho que teria sido uma boa idéia ter uma visão de que para criar a tabela de preços. Ele teria encurtado o geral Selecção por cerca de metade.

Eu não sei se o DB iria avaliar a vista uma vez, ou uma vez a cada vez em foi invocado. Ninguem sabe? Se o ex-performance, utilizando uma visão seria melhorado.

Sempre que precisar [my_interface] = [user_interface].

Exemplo:

TABELA A:

  • id
  • info

VISTA PARA O QUADRO A:

  • Informações do Cliente

Esta é uma maneira que você pode esconder o ID do cliente e mudar o nome da informação a uma entrada mais detalhado nomear ambos ao mesmo tempo.

A visão irá usar o índice subjacente para id chave primária, então você não vai ver uma perda de desempenho, apenas melhor abstração da consulta de selecção.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top