Sei sulla pagina 1di 8

VISTAS

1 CONCEPTO DE VISTA ........................................................................................................................................ 2


1.1 ¿QUÉ ES UNA VISTA? ........................................................................................................................................ 2
2 CREACIÓN DE UNA VISTA. (CREATE VIEW)............................................................................................... 3
3 ACTUALIZACIÓN DE UNA VISTA ................................................................................................................... 4
3.1 COMPROBACIÓN DE ACTUALIZACIONES DE VISTAS (CHECK OPTION) .......................................................... 5
4 ELIMINACIÓN DE UNA VISTA (DROP VIEW) .............................................................................................. 6
5 VISTAS EN MYSQL .............................................................................................................................................. 6
6 VISTAS MATERIALIZADAS .............................................................................................................................. 7
1 Concepto de Vista

Cuando estudiamos en el tema 1, cómo el modelo relacional se encuadraba dentro del marco de la
arquitectura ANSI de tres capas, utilizamos el siguiente gráfico:

Recordemos que la arquitectura ANSI de tres niveles establecía niveles de definición de la


estructura de una base de datos:

 Esquema Interno. Es el nivel más bajo, en él se describen aspectos relativos a cómo se


almacenan realmente los datos (tamaño de bloques, direccionamiento, técnicas de
compresión,...)

 Esquema Conceptual. Se describe, de acuerdo a las normas de un modelo determinado, la


estructura que se utilizará para almacenar los datos en la BD.

 Esquemas externos. En ellos se describen solamente una parte de la BD, ya que muchos
usuarios necesitarán únicamente una visión parcial y personalizada de la estructura del
ámbito acotado en el que trabajan. Para estos usuarios se define una vista externa o
subesquema de la BD. Por ejemplo en un sistema bancario, las personas que trabajan con las
nóminas sólo podrán ver la parte de la BD con información sobre los empleados, mientras
que los cajeros sólo podrán tener acceso a la información de las cuentas.

En el modelo relacional, los usuarios pueden trabajar directamente sobre el esquema conceptual o
sobre las vistas que de él se definan. Existe una independencia lógica entre los datos accesibles a
través de una vista y en cómo estén estructurados realmente en el esquema conceptual, ya que es
posible cambiar la estructura lógica de una base de datos, sin que eso conlleve necesariamente una
modificación sobre la estructura de las vistas definidas

1.1 ¿Qué es una vista?


Una vista es una “tabla virtual” que se incluye en una base de datos determinada, cuyos contenidos
están definidos por una consulta.
Para el usuario de la base de datos, la vista aparece como una tabla real, con un conjunto de
atributos y registros. Pero a diferencia de una tabla real, una vista no existe en una base de datos
como conjunto almacenado de valores., ya que sus datos han de ser producidos ejecutando la
consulta asociada. Todo este proceso es transparente al usuario y es gestionado automáticamente
por el sistema.

Ventajas de las vistas:

 Seguridad. Cada usuario puede obtener permisos para acceder a la base de datos
únicamente a través de ciertas vistas que contienen los datos específicos que ese usuario está
autorizado a ver. Esto simplifica en gran medida la gestión de los permisos asociados a los
usuarios sobre los datos.

 Simplicidad de consulta. Una vista pueda extraer datos de varias tablas diferentes y
presentarlos como una única tabla, haciendo que las consultas multitabla se formulen como
consultas de una única tabla con respecto a la vista.

 Simplicidad estructurada. Las vistas pueden dar a un usuario una visión “personalizada”
de la estructura de la base de datos, abstrayendo al mismo, de la estructura real de la base de
datos.

 Aislamiento frente al cambio. Una vista puede presentar una imagen consistente de la
estructura de la base de datos, incluso si las tablas fuente subyacentes se dividen,
reestructuran o cambian de nombre.

Desventajas de las vistas:

 Rendimiento. Las vistas crean la apariencia de una tabla, pero el SGBD debe traducir las
consultas sobre la vista a consultas sobre las tablas fuentes subyacentes.

 Restricciones de actualización. Cuando un usuario trata de actualizar registros de una


vista, el SGBD debe traducir la petición a una actualización sobre las filas de las tablas
fuentes. Esto es posible para vistas sencillas, pero vistas complejas no pueden ser
actualizadas.

Por tanto, dadas sus desventajas, no se deben definir indiscriminadamente vistas sobre nuestras
bases de datos y utilizarlas en detrimento de las tablas fuentes. Habrá que considerar en cada caso
las ventajas proporcionadas por el uso de vistas ponderándolas con sus desventajas.

2 Creación de una vista. (CREATE VIEW)

La sentencia CREATE VIEW es la que se utiliza para crear vistas. Su sintaxis es muy sencilla:

CREATE VIEW Nombre_Vista AS Consulta_Asociada;

Por ejemplo:

CREATE VIEW RepEste AS Select * FROM RepVentas Where Oficina IN (11,12,13);


La sentencia CREATE VIEW puede asignar opcionalmente un nombre a cada columna en la vista
recién creada. Si se especifica una lista de nombres de columnas, debe tener el mismo número de
elementos que el número de columnas producidas por la consulta. La lista de nombres de columnas
debe especificarse si la consulta incluye columnas calculadas o columnas con el mismo nombre.

CREATE VIEW Nombre_Vista (col1, col2,…coln) AS Consulta_Asociada;

En función de los datos gestionados por las vistas, podemos encontrarnos con varios tipos:

 Vistas horizontales. Permiten acceder solamente a un subconjunto de los registros de la


tabla. Para los registros visibles, se podrán acceder a todos sus campos.

CREATE VIEW RepEste AS Select * FROM RepVentas Where Oficina IN (11,12,13);

 Vistas verticales. Permiten acceder a todos los registros de la tabla, aunque en lugar de
poder acceder a todos los atributos, sólo a un subconjunto de ellos.

CREATE VIEW InfoClie AS Select empresa, rep_cliente FROM Clientes;

 Vistas con subconjuntos fila/columna. Son una combinación de las dos anteriores.

CREATE VIEW InfoClie AS


SELECT empresa, rep_cliente FROM Clientes WHERE comunidad=’Andalucía’;

 Vistas agrupadas. Si la consulta asociada a la vista incluye una cláusula GROUP BY o


funciones resumen, estamos ante una vista agrupada. Este tipo de vistas, producen una fila
de resultados por cada grupo, resumiendo sus datos a través de funciones resumen. A
diferencia de las anteriores, no existe en este caso una correspondencia uno a uno entre las
filas de la vista y las filas de la tabla fuente subyacente.

 Vistas compuestas. Son vistas en las que los registros resultados se obtienen tras combinar
varias tablas fuentes.

3 Actualización de una vista

¿Qué significado tiene insertar un registro en una vista, suprimirlo o actualizarlo? Para algunas
vistas estas operaciones pueden ser traducidas obviamente a operaciones equivalentes respecto a las
tablas fuentes de la vista. Sin embargo en otros casos: vistas agrupadas, vistas compuestas y vistas
verticales, está traducción no es nada obvia y por lo tanto el SGBD no podrá determinar cómo
traducir esa sentencia. Pensemos si no en las siguientes vistas:

CREATE VIEW RepEste AS Select * FROM RepVentas Where Oficina IN (11,12,13);

CREATE VIEW RepEste AS


SELECT Nombre, empresa, SUM (importe)
FROM RepVentas , Pedidos, Clientes
WHERE rep=num_empl AND clie=num_clie
GROUP BY nombre,empresa;
Insertar un registro en el primer caso es una tarea factible, ya que sólo se hace referencia a una
única tabla y además los atributos de la tabla subyacente coinciden con los de la vista. Sin embargo
en el segundo caso, no tendría ningún sentido tratar de hacer un INSERT, ya que el sistema no
sabría traducirlo.

De acuerdo al estándar ISO, una vista puede ser actualizada si la consulta que la define satisface las
siguientes restricciones:

 No debe especificarse DISTINCT, es decir, las filas duplicadas no deben ser eliminadas de
los resultados de la consulta.

 La cláusula FROM debe especificar solamente una tabla actualizable, es decir, la vista debe
temer una única tabla fuente para la cual el usuario tenga los privilegios requeridos.

 El SELECT no puede contender funciones resumen, columnas calculadas o expresiones.

 La cláusula WHERE no debe incluir subconsultas, sólo pueden aparecer condiciones de


búsqueda simples fila a fila.

 La consulta no debe incluir cláusula GROUP BY.

En el caso de las vistas verticales que satisfagan los puntos anteriores, éstas serán actualizables si se
definen valores por defecto, o se permiten la inclusión de nulos en los atributos que formen parte de
la tabla asociada, pero que no formen parte de la vista.

Las reglas definidas por el estándar son muy restrictivas. Hay muchas vistas que pueden ser
actualizadas teóricamente y que no satisfacen todas las restricciones. Además, hay vistas que
pueden soportar algunas de las operaciones de actualización pero no otras. La mayoría de las
implementaciones SQL comerciales tienen reglas de actualización de vistas que son
considerablemente más permisivas que el estándar.

3.1 Comprobación de actualizaciones de vistas (CHECK OPTION)

Si una vista se define mediante una consulta que incluye la cláusula WHERE, sólo los registros que
satisfagan la condición ahí expresada serían visibles. En la siguiente vista, sólo los registros, cuya
oficina sea la 11, 12 o 13 aparecerán:

CREATE VIEW RepEste AS SELECT * FROM RepVentas WHERE Oficina IN (11,12,13);

La vista anterior, es una vista actualizable, ya que cumple todas las condiciones expresadas en el
punto anterior. Por lo tanto, una sentencia como la siguiente es perfectamente válida:

INSERT INTO RepEste (num_empl, nombre, oficina_rep, edad, ventas)


VALUES (114, ’Carlos García’, 21, 47, 0);

El sistema insertaría ese registro en la tabla RepVentas. Sin embargo, la fila insertada no satisface la
condición WHERE asociada a la vista por lo que si hacemos un SELECT * FROM RepEste, el
registro que acabamos de insertar no aparecería, lo cual puede resultar un poco desconcertante.
Para evitar que ocurra lo anterior, SQL nos permite añadirle una cláusula a la sentencia de creación
de vista, que garantice que las actualizaciones que se realicen sobre las mismas deban cumplir las
restricciones expresadas en el WHERE y de no hacerlo, no serán permitidas. Para ello, bastará con
añadir WITH CHECK OPTION al final de la definición:

CREATE VIEW RepEste AS


SELECT * FROM RepVentas WHERE Oficina IN (11,12,13)
WITH CHECK OPTION;

La opción de comprobación añade una carga de trabajo adicional a las operaciones INSERT y
UPDATE, pero ayuda a asegurar la integridad de la base de datos.

4 Eliminación de una vista (DROP VIEW)

Borrar una vista es muy sencillo. Basta con invocar a la sentencia DROP VIEW seguido del nombre
de la vista que queremos eliminar. Por ejemplo:

DROP VIEW RepEste;

5 Vistas en MySQL

La sintaxis que utiliza MySQL para definir o modificar vistas es la siguiente:


CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nombre_vista [(columnas)]
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]

Podemos observar que coincide con la expresada en el estándar SQL con leves diferencias. MySQL
permite definir diferentes valores para el parámetro ALGORITHM. Este parámetro le indica al
sistema cómo debe actuar a la hora de traducir una consulta sobre una vista:

 UNDEFINED: Dejamos que sea MySQL quien decida el algoritmo por si mismo. Es el
caso por defecto.

 MERGE: En este caso, MySQL tratará de combinar la consulta realizada sobre la vista con
la consulta que define la vista, de manera que el resultado pueda ser más óptimo.

 TEMPTABLE: En el momento de hacer una consulta sobre la vista se crea una tabla
temporal donde se guardan los registros de la vista y sobre esa tabla virtual se realizaría la
consulta. El uso de esta opción tiene una gran ventaja y una gran desventaja:
o Desventaja: La vista no es actualizable, por lo que cualquier cambio se deberá
hacer en la tabla original.
o Ventaja: Los bloqueos se liberan antes, ya que la consulta de la vista se hace a partir
de la tabla temporal, lo que posibilita que otros threads puedan realizar otras
operaciones sobre la tabla original, obteniendo de esta manera un rendimiento
mayor.
En MySQL, las vistas no serán actualizables si contienen:

 Funciones agregadas (SUM(), MIN(), MAX(), COUNT(), etcétera)


 DISTINCT
 GROUP BY
 HAVING
 UNION o UNION ALL
 Una subconsulta en la lista de columnas del SELECT
 JOIN
 Una vista no actualizable en la cláusula FROM
 Una subconsulta en la cláusula WHERE que hace referencia a una tabla en la cláusula
FROM
 Hace referencia solamente a valores literales (en tal caso no hay una tabla subyacente para
actualizar).
 ALGORITHM = TEMPTABLE (utilizar una tabla temporal siempre resulta en una vista no
actualizable).

Con respecto a la posibilidad de agregar registros mediante sentencias INSERT, es necesario que las
columnas de la vista actualizable también cumplan los siguientes requisitos adicionales:

 No debe haber nombres duplicados entre las columnas de la vista.

 La vista debe contemplar todas las columnas de la tabla en la base de datos que no tengan
indicado un valor por defecto.

 Las columnas de la vista deben ser referencias a columnas simples y no columnas derivadas.
Una columna derivada es una que deriva de una expresión.

6 Vistas Materializadas

En un sistema de gestión de base de datos que siga el modelo relacional, una vista es una tabla
virtual, que representa el resultado de una consulta. Siempre que se consulta o se actualiza una vista
normal, el SGBD convierte estas operaciones en consultas o actualizaciones de las tablas usadas
para definir la vista.

Una vista materializada utiliza una aproximación diferente: el resultado de la consulta se almacena
en una tabla caché real, que será actualizada de forma periódica a partir de las tablas originales.

Esto proporciona un acceso mucho más eficiente, a costa de un incremento en el tamaño de la


base de datos y a una posible falta de sincronía, es decir, que los datos de la vista pueden estar
potencialmente desfasados con respecto a los datos reales.

Es una solución muy utilizada en entornos de almacenes de datos (datawarehousing), donde el


acceso frecuente a las tablas básicas resulta demasiado costoso.

Además, dado que la vista se almacena como una tabla real, se puede hacer con ella lo mismo que
con cualquier otra tabla, siendo especialmente importante la capacidad de crear índices en cualquier
columna, lo cual puede aumentar significativamente la velocidad de las consultas. En una vista
normal, lo habitual es que sólo se permita utilizar índices sobre aquellas columnas que ya tienen
definido un índice en la tabla original; a veces ni siquiera se ofrece esa posibilidad.
Las vistas materializadas fueron implementadas por primera vez en el gestor de base de datos
Oracle. Otros sistemas como SQL Server las llaman vistas indexadas. En MySQL no es posible
trabajar con este tipo de vistas.

Potrebbero piacerti anche