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:
Poderíamos simplificar a definição da tabela usando uma view:
Assim, podemos acessar a tabela de usuários diretamente pela tabela ou através da View:
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).
Podemos usar a View para realizar operações DML. Por exemplo, vamos inserir registros na tabela:
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:
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:
Nesse caso não é possível redefinir o nome dos campos e o SELECT retorna os campos iguais a definição da tabela.
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).
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.