3.Índices y vistas
3.Índices y vistas
3.Índices y vistas
Fundamentals
Índices y vistas
Big Data Fundamentals
Índices y vistas
Índice
1. Presentación........................................................................... 3
2. Definición de índice .................................................................. 3
3. Creación de índices .................................................................. 4
4. Eliminación de índices ............................................................... 5
5. Definición de vista .................................................................... 6
6. Creación de vistas .................................................................... 6
7. Ejemplos de creación de vistas ..................................................... 7
8. Eliminación de vistas ................................................................. 9
9. Actualización de vistas............................................................. 10
10. El problema de las filas migratorias ............................................ 11
11. Resumen ............................................................................ 12
Referencias bibliográficas ............................................................ 12
1. Presentación
Ya sabemos cómo utilizar el LDD de SQL para crear el esquema conceptual de la base
de datos, modificarlo y chequear la integridad. El conjunto de datos a los que puede
acceder un usuario compone la vista que tiene el mismo de la base de datos. La
creación de vistas está relacionada con la definición de autorizaciones. Para completar
la política de autorizaciones será necesario realizar otras operaciones que ya no es
posible llevar a cabo con el LDD. En estos casos, será la aplicación de usuario la
encargada de realizarlas.
2. Definición de índice
Normalmente, la información que se introduce en una base de datos está almacenada
de forma permanente en la memoria secundaria. Durante la operación con la BD se
producen transferencias de información entre la memoria secundaria y la memoria
principal utilizando una memoria temporal llamada página. Cada vez que se realiza un
acceso a la memoria secundaria para leer una página se ralentiza el tiempo de
respuesta del sistema.
El acceso a la información de una tupla de una tabla puede requerir una lectura
secuencial de todo el contenido de la base de datos, con sus correspondientes
transferencias de información entre memoria secundaria y memoria principal.
El sentido es exactamente el mismo que los índices de los libros. Se podría localizar
un término en el libro haciendo una lectura secuencial de todo el libro, pero si este
dispone de un índice, la búsqueda se reduciría a encontrar el término en la página
indicada.
El orden establecido en el índice viene determinado por los valores de una o más
columnas de una tabla. Estas columnas forman lo que se denomina campo de
indexación.
Aunque un índice puede llegar a mejorar mucho el tiempo invertido en una consulta,
supone una carga extra para el sistema. Por ello, suelen crearse para resolver consultas
concretas en tablas que llevan tiempo en uso y cuyo tamaño ha aumentado.
3. Creación de índices
A pesar de que el estándar SQL no contempla la creación de índices, la mayoría de los
dialectos soportan las siguientes características:
• <tabla> indica la tabla sobre la cual vamos a establecer el índice. Solo pueden
crearse índices sobre tablas sencillas (o base), no sobre vistas.
Ejemplos
4. Eliminación de índices
Los índices consumen recursos del sistema tanto de almacenamiento como de
procesamiento. Hay que pensar bien en qué ocasiones es necesario utilizarlos y cuándo
no lo es.
Es posible que exista una consulta muy repetida en el SBD que ya ha dejado de
utilizarse o manejar una tabla que inicialmente tenía mucha información y ya no la
tiene.
Ante estas situaciones hay que eliminar el índice que teníamos asociado. La sentencia
para eliminar un índice es:
Ejemplos
Con las siguientes sentencias eliminamos los índices creados en los ejemplos de la
pantalla anterior.
5. Definición de vista
Por regla general, no todos los usuarios necesitan ver el contenido de la base de datos
completa, más aún, si estos datos son privados.
Para definir el subconjunto de datos a los que cada usuario tiene acceso se utilizan las
vistas.
Para especificar cuáles serán los datos en concreto que formarán parte de la vista, se
define una sentencia SELECT sobre una o más tablas base o sobre otras vistas. A esta
consulta se le denomina consulta de definición.
6. Creación de vistas
La sentencia para definir vistas es:
Donde:
Ejemplo
La vista sería:
La vista resultado que se obtiene es (la tabla se ha divido en dos por tener muchos
atributos):
reserva precio
1 73
2 390
3 506
4 146
5 9785
6 1071
7 714
8 849
9 1473
10 94
11 643
Ejemplo. Vuelos y comidas especiales que han seleccionado los pasajeros del mismo.
La vista sería:
8. Eliminación de vistas
La sentencia que se utiliza para eliminar vistas es:
• <acción> define qué pasará con los objetos creados en la base de datos a partir
de esta vista. Hay dos opciones de acción:
o CASCADE. En este caso no solo se elimina esta vista, sino que también se
eliminarán todas las vistas que se hayan definido en base a esta.
Ejemplo
Con las siguientes sentencias, eliminamos las vistas incluidas en los ejemplos de la
pantalla anterior (a la derecha de la tabla).
9. Actualización de vistas
Las actualizaciones realizadas sobre una tabla base afectan inmediatamente a la vista
creada sobre dicha tabla. Sin embargo, el caso contrario no siempre es posible.
Ejemplo
Dada la tabla cliente (DNI, nombre, apellido, dirección, ciudad) y las siguientes vistas
que contiene el nombre, apellido y calle de los clientes de Murcia:
Dado que una vista se puede utilizar en todos aquellos lugares dentro de sentencias de
SQL donde se utilizan tablas, se puede utilizar la siguiente sentencia para insertar los
datos de un cliente:
¿Qué ocurre, por ejemplo, con el DNI, que no puede ser nulo?
Ninguna fila que se añada utilizando la vista puede violar la integridad de la tabla base,
por tanto, al insertar estos datos se intentará insertar la tupla correspondiente en
clientes, estableciendo el DNI a NULL. Como esto no es posible por ser la clave de la
relación, el SGBD nos dará un error. No se puede, por tanto, violar ninguna restricción
de NOT NULL.
Esto hace que cualquier INSERT o UPDATE sobre una vista que viole la cláusula WHERE
sea cancelado.
11. Resumen
En este tema hemos visto que el LDD de SQL permite la creación y eliminación de
índices y vistas.
• Una vista es una tabla virtual que contiene el conjunto de datos permitidos para
un usuario. Se utilizan para definir autorizaciones. En la siguiente sintaxis de la
sentencia de creación de vistas, subconsulta es la consulta de definición de la
vista y WITH CHECK OPTION evita la aparición de filas migratorias.
• Para eliminar una vista se utiliza la siguiente sentencia. Acción puede ser
RESTRICT o CASCADE.
Referencias bibliográficas
Connolly, T. M. y Begg, C. E. (2005). Sistemas de bases de datos. Un enfoque
práctico para diseño, implementación y gestión. Pearson.
Java. <http://java.sun.com/docs/books/tutorial/jdbc/index.html>
Java. <http://java.sun.com/javase/6/docs/api/>