Share via


Tabelas, Views, CTE e Synonyms

View é um dos recursos mais poderosos do banco de dados relacional. Podemos usar as Views como sinônimos de tabela, facilitando o acesso aos dados. Por exemplo, vamos usar uma tabela de usuário definida com dois campos:

image

Poderíamos simplificar a definição da tabela usando uma view:

image

Assim, podemos acessar a tabela de usuários diretamente pela tabela ou através da View:

image

O desempenho é praticamente idêntico entre as duas consultas, pois a View é somente uma “definição”. Se você tiver curiosidade, pode olhar a DMV sys.dm_exec_cached_plans e observar que a View é armazenada como uma árvore sintática (parse tree) ao invés de um plano de execução (compiled plan).

image

image

 

Podemos usar a View para realizar operações DML. Por exemplo, vamos inserir registros na tabela:

image

WOW!!! Note que estou inserindo registros na tabela “tabela_usuarios” usando a view “vwUsuarios”, assim como poderia ter executado outros comandos DML (UPDATE e DELETE) na view.

 

Common Table Expression (CTE)

Muitos já ouviram falar sobre as CTE, também conhecidas como Common Table Expression. Gosto de pensar que as CTE são as “Inline-View” e, portanto, seria equivalente realizar o seguinte comando:

image

Esse único comando define uma expressão chamada “cteUsu” que existe somente no contexto da execução do SELECT. É semelhante a View, pois representa apenas uma definição. É diferente porque a definição é temporária, sem necessidade de guardar o metadado. O desempenho é igual a usar o acesso a uma tabela ou a view.

 

Synonyms

Sinônimo é a forma mais fácil de “renomear” um objeto. Eu posso usar um sinônimo para a tabela de usuários:

image

Nesse caso não é possível redefinir o nome dos campos e o SELECT retorna os campos iguais a definição da tabela.

image

Por outro lado, podemos criar sinônimos para Stored Procedures e Functions. A parte mais divertida do sinônimo é que podemos referenciar objetos em outros banco de dados (inclusive em outros servidores, se usarmos Linked Server).

image

 

Conclusão

Esse artigo dá início a série “Another point of VIEW” com o objetivo de revelar uma perspectiva diferente sobre as Views. Assim como elas resolvem problemas, elas também escondem algumas armadilhas.

Nos próximos artigos, abordarei a diferença entre View e Function.