sábado, 6 de febrero de 2016

SQL Server: Vistas

Una vista es una sentencia SELECT constituida como un objeto de SQL separado de la tabla o tablas a las que hace referencia. El resultado de su ejecución es un conjunto de registros similar al que obtendríamos con una tabla.
La vista no es una tabla, es una definición de una consulta es decir no posee datos propios. Una vez que está definida la consulta, una vista puede utilizarse como si fuera una tabla, refiriéndose a ella por su nombre.


Vistas en SQL Server




Aspectos básicos, Utilidad de las vistas

Las vistas son utilizadas para facilitar consultas de uso frecuente, o de difícil construcción, también sirven como parte de la política de seguridad del sistema particionando vertical y horizontalmente los datos de las tablas que muestra. Las vistas se utilizan para:
Proteger la confidencialidad.
Si una tabla contiene datos que no deben ser accesibles a algunos usuarios, puede construirse una vista en la que dichos datos no aparezcan y autorizar a los usuarios a trabajar con la vista en lugar de con la tabla. De este modo se restringe el acceso a ciertas columnas, mediante la lista de la cláusula SELECT de la vista, y a ciertas filas, seleccionándolas mediante la cláusula WHERE.
Facilidad de utilización.
El Administrador puede formular sentencias SELECT complejas y almacenarlas como vistas, de puedan utilizar usuarios con poca experiencia y no necesiten crearlas de nuevo para poder acceder a los datos.
Independencia con respecto a los datos.
Cambios en la implementación de las tablas de la base de datos que incluyan cambios en los nombres de las columnas pueden originar que los programas deban actualizarse. Una forma de evitar este problema es creando vistas con nombres fijos que san las utilizadas por los programas.

Consulta y actualización

Una vista es actualizable sí es posible trasladar las modificaciones que en ella se introduzcan en la tablas o tablas de las que proviene. Esta actualización de tablas no será posible si existe ambigüedad en la procedencia de los datos, es decir cuando no exista una correspondencia biunívoca entre las filas de la vista y la de las tablas asociadas. En las siguientes situaciones la vista no será actualizable.
Vistas que realicen joins de dos o más tablas.
Vistas que contengan funciones colectivas
Vistas que contengan la cláusula GROUP BY
Vistas que contengan la cláusula DISTINCT.

Creación de vistas

Para crear vistas a través de comandos se utiliza la sintaxis de definición CREATE VIEW.

CREATE VIEW [ propietario. ] nombre_vista [ (columna [ ,...n ] ) ]
[ WITH <atributo> [ ,...n ] ]
AS sentencia_select
[ WITH CHECK OPTION ]
[ ; ]
<atributo>  
{
[ ENCRYPTION ]
[ SCHEMABINDING ]
[ VIEW_METADATA ]    
}

Lista de columnas.
La lista de identificadores de columna es opcional y permite especificar nombres de columna  diferentes a los de la tabla de la que procede. Sólo es imprescindible indicar un nombre de columna de la vista si deriva de una expresión aritmética, una función o una constante, o  si  dos columnas de la vista tienen el mismo nombre en las tablas de origen, como consecuencia de un join.

Encriptado.
La cláusula WITH ENCRYPTION encripta las filas de la tabla syscomments en las cuales se encuentra el texto de definición de la vista del catálogo, para que la sintaxis de la sentencia SELECT no pueda ser consultada por ningún usuario.
Esta select muestra la definición de todos los objetos definidos en la base de datos.

select * from syscomments
Consulta que define la vista a través de  sentencia_select.
En la cláusula AS se especificará una sentencia SELECT que definirá la vista. Esta sentencia SELECT consulta datos de una o varias tablas, sin embargo existen algunas restricciones para esta consulta:

No puede contener la cláusula ORDER BY.
No puede incluir la palabra clave INTO.
No puede hacer referencia a una tabla temporal.

Esto es un ejemplo de una vista sencilla.
CREATE VIEW [DBO].[Nombre_vista]
AS
SELECT Columna1
FROM DBO.Nombre_tabla
WHERE NOT EXISTS (SELECT * FROM DBO Nombre_tabla
WHERE Columna2 = DBO Nombre_tabla.Columna1)
GO
En este caso se realiza una select sobre una única tabla pero con la condición que de que el contenido de la columna1 no exista en otra columna de esa misma tabla llamada columna2.


Creación de vistas mediante el Administrador Corporativo

Las vistas también pueden definirse con el Administrador Corporativo.

Sobre la base de datos desplegando y posicionándonos sobre la carpeta vistas con el botón derecho del ratón elegimos Nueva vista…

crear una vista con administrador corporativo de SQL Server

Con esto aparecerá el siguiente cuadro de diálogo

añadir tablas a una vista

En el que elegiremos la tabla o tablas o incluso podemos elegir otras vistas, funciones y sinónimos anteriormente creados para incluir en nuestra vista. A medida que elegimos los objetos deseados pulsamos el botón agregar para añadirlas al diagrama del diseñador de vistas.
También es posible arrastrar las tablas que sirvan de base a la vista al diagrama del diseñador visual. Una vez seleccionadas las tablas puede construirse la consulta gráficamente en el editor, para ello unimos las diferentes columnas de las tablas para hacer joints o select complejas otro procedimiento es simplemente escribir la sentencia SQL directamente. Según deseemos.

diseñador gráfico de vistas con SQL Server




En la imagen de arriba se ha marcado como el filtro ascendente se refleja en la SELECT con una cláusula ORDER BY.

Pulsando el botón Guardar,  SQL Server almacena la vista y realiza un chequeo de su sintaxis.

Para eliminar una vista basta con acceder a ella desde el Administrador Corporativo elegirla y pulsar el botón derecho del ratón y eliminar.



eliminar una vista
 
También podemos destruir una vista utilizando DROP VIEW [ propietario. ] nombre_vista en este caso se destruirán todas las vistas que dependan de ella. Si eliminamos una tabla también se eliminarán las vistas que dependan de ella.

No hay comentarios:

Publicar un comentario