PRACTICA DE ADMINISTRACION DE BASES DE DATOS
Una entidad bancaria gestiona datos relativos a operaciones bancarias de sus clientes en sus sucursales y cajeros. Nos proporcionan seis ficheros de texto con registros de longitud fija que contienen una pequeña cantidad del conjunto global de datos, para crear la base de datos con Interbase.La información que se acompaña en los anexos es la siguiente:
1. El anexo 1, se detallan las sentencias SQL a partir de las cuales deberá determinarse el conjunto de índices adecuado para la base de datos.
2. En el anexo 2 se especifica el esquema de la base de datos en Interbase.
Realizar una memoria que contemple los apartados que se detallan a continuación. Justificar para cada apartado las soluciones planteadas. Para la realización de la práctica se utilizará el SGBDR Interbase 6 (server), que se encuentra disponible en el Centro de Cálculo de la Escuela, en la página www.inprise.com, y en la página de la asignatura
1. CREACIÓN Y CARGA INICIAL DE LA BASE DE DATOS
La base de datos se creará con un tamaño de página de 4096 bytes. En este apartado se crearán los ficheros script para: a) Crear las tablas transitorias asociadas a los ficheros de texto que se proporcionan.
b) Crear las tablas definitivas en Interbase. No se especificará ningún tipo de clave ni índice. c) Insertar los datos en las tablas definitivas.
Para las tablas transitorias asociadas a los ficheros de texto, crear por cada tabla de la base de datos una tabla para leer el fichero externo, con los mismos atributos pero todos de tipo carácter, y añadir al final un atributo que almacene el fin de línea (carácter de dos posiciones). Por ejemplo, para la tabla OperSucursal:
CREATE TABLE OperSucursalTXT
EXTERNAL FILE 'c:\pracABD\FicherosTexto\operSucursal.txt' CREATE TABLE OperSucursal
( IDOperacion CHAR (11) character set ASCII, ( IDOperacion INTEGER NOT NULL, NumCuenta CHAR (11) character set ASCII, NumCuenta INTEGER NOT NULL, SucursalOper CHAR (6) character set ASCII, SucursalOper SMALLINT NOT NULL, FechaOperacion CHAR (11) character set ASCII, FechaOperacion DATE NOT NULL, Importe CHAR (13) character set ASCII, Importe DECIMAL(8,2) NOT NULL, TipoOperacion CHAR (1) character set ASCII, TipoOperacion CHAR (1) NOT NULL); finLinea CHAR (2) character set ASCII );
La correspondencia de tipos es: INTEGER como CHAR(11); SMALLINT como CHAR(6); DATE como CHAR(11), DECIMAL(8,2) como CHAR(13).
La inserción en las tablas definitivas se realizará con una inserción normal (posteriormente se eliminarán las tablas transitorias):
INSERT INTO OperSucursal
SELECT IDOperacion,NumCuenta,SucursalOper,FechaOperacion,Importe,TipoOperacion FROM OperSucursalTXT;
Para la definición de claves se implementarán cuatro ficheros script para:
d) Crear las claves primarias de cada tabla (sentencia Alter Table Add Constraint...) e) Crear las claves foráneas (sentencia Alter Table Add Constraint...)
f) Eliminar las claves foráneas de las tablas g) Eliminar las claves primarias de las tablas
Deberá justificarse si los índices se deben crear antes o después de hacer la carga de los datos, tendremos en cuenta solamente los índices creados con la definición de clave primaria y foránea. Para ello, se medirá el tiempo de ejecución en cada uno de los casos. Por tanto, se deberá obtener el tiempo de ejecución de las sentencias de los ficheros script, en las secuencias:
1. índices antes de la carga: a, b, c, d, e 2. índices después de la carga: a, b, e, c, d, Nota:
La definición de clave principal o foránea lleva implícita la creación de un índice único.
La carpeta Statistics en la ventana SQL nos proporciona información sobre la sentencia SQL ejecutada.
En este apartado se realizará un estudio reflejando en la memoria el proceso seguido y los resultados obtenidos en la ejecución de las sentencias que se acompañan en el Anexo 1:
a) Eliminar las claves foráneas y principales de las tablas. Medir los tiempos de ejecución de cada sentencia del Anexo 1. b) Crear las claves principales y foráneas de las tablas. Medir los tiempos de ejecución de cada sentencia del Anexo 1. c) Con las claves primarias y foráneas creadas, realizar un estudio de índices para cada una de las sentencias del Anexo 1:
1. Crear índices para los atributos candidatos (todos los atributos de la sentencia, salvo los que sean clave o figuren únicamente en la cláusula Select)
2. Determinar el tiempo de ejecución de la sentencia sql antes de crear ningún índice.
3. Determinar el tiempo después de la creación de cada índice, de forma individual, y en combinación con otros índices. Deberá indicarse el tiempo de ejecución y los índices que están activos en ese momento.
d) En función de los tiempos obtenidos, debe especificarse qué índices se consideran más adecuados para que cada sentencia se ejecute en el menor tiempo posible.
e) Considerando ahora que la BD se encuentra en explotación, especificar un escenario con procesos de actualización y consulta y la frecuencia de ejecución de éstos. Para dicho escenario indicar el conjunto de índices que se recomendaría.
Notas:
1. Para establecer correctamente los tiempos de ejecución de las sentencias, debe tenerse en cuenta que tras la ejecución de una consulta, todos o parte de los datos se encuentran en memoria principal, por lo que el tiempo de ejecución puede ser menor (ejecutar varias veces la sentencia para determinar la media del tiempo de ejecución).
2. La medición de tiempos se realizará por sentencias individuales, no debe medirse la ejecución de varias sentencias a la vez.
3. La sentencia alter index permite activar o desactivar un índice sin necesidad de eliminarlo y crearlo de nuevo.
3. CATÁLOGO DE LA BASE DE DATOS
Crear las siguientes vistas con la información que se indica, y efectuar después una consulta sobre ellas:
a) Obtener por cada tabla de la BD, el nombre de la tabla y por cada atributo: el nombre, el tipo de dato (en letras y no en número), la longitud en bytes y si admite o no valores nulos.
b) Para las claves foráneas obtener nombre de índice, nombre de relación dependiente, atributo dependiente, tabla padre y atributo referenciado de la tabla padre.
c) Crear una vista definida sobre un procedimiento almacenado que permita obtener para cada índice de la base de datos (excluyendo las tablas del catálogo) nombre de la tabla a la que indexa, nombre del índice, tipo de índice (primaria, foránea, único, duplicados) y el estado actual (activo o inactivo). La salida deberá ser similar a la siguiente:
RELACION INDICE TIPO ESTADO
CLIENTES ILOCALIDAD INDICE CON DUPLICADOS INACTIVO CLIENTES RDB$PRIMARY1 CLAVE PRIMARIA ACTIVO CLIENTES ICLIENTE INDICE UNICO ACTIVO CUENTAS RDB$PRIMARY3 CLAVE PRIMARIA ACTIVO CUENTAS RDB$FOREIGN8 CLAVE FORANEA ACTIVO ... ... ... ...
d) Obtener por cada vista creada el nombre, las tablas o vistas en la s que está basada, y el propietario de ellas.
Nota: para poder visualizar las tablas del catálogo se debe activar la opción System Data en el menú View de IBConsole
4. SEGURIDAD
En este apartado comprobaremos la asignación de privilegios a usuarios. Realizar lo siguientes pasos, especificando en la memoria las sentencias ejecutadas y los resultados obtenidos:
a) Crear dos usuarios de nombre “ususucursal” y “usutarjeta” respectivamente.
b) Asignar a ususucursal todos los privilegios sobre las tablas clientes, sucursal, cuentas y operSucursal. c) Asignar a usutarjeta:
1. todos los privilegios sobre las tablas tarjetas y operTarjeta
2. privilegio de consulta sobre las tablas clientes, sucursal y cuentas
d) Acceder a la BD como usuario ususucursal, y ejecutar al menos dos sentencias sobre las que tenga privilegios y otras dos sobre las que no lo tenga.
e) Acceder a la BD como usuario usutarjeta, y ejecutar al menos dos sentencias sobre las que tenga privilegios y otras dos sobre las que no lo tenga.
f) Intentar crear con uno de estos usuarios, cualquier nuevo objeto sobre la BD, por ejemplo un índice sobre alguna tabla. Explicar el resultado
5. TAMAÑOS DE PÁGINA
Determinar el tamaño del fichero de la BD en bytes utilizando los diferentes tamaños de página posibles (1024, 2048, 4096, 8192). Decidir razonadamente el tamaño de página más adecuado. ¿El tamaño de página influye sólo en el tamaño de la BD? Comprobar para cada tamaño de página las estadísticas de llenado de páginas, (opción Database Statistics del submenú Maintenance del menú Database de IBConsole) y establecer las conclusiones pertinentes. No incluir en la memoria el resultado de dichas estadísticas, sino un resumen de éstas.
Para crear la base de datos con los diferentes tamaños de página:
1. Realizar un Backup de la base de datos (opción Backup de Maintenance del menú Database, de IBConsole) 2. Realizar un Restore especificando el nuevo tamaño de página (opción Restore de Maintenance)
6. REORGANIZACIÓN LÓGICA DE LA BD
Proponer reorganizaciones lógicas de la base de datos que permitan optimizar el rendimiento, respecto a: a) Ocupación física de la base de datos
b) Mejora del rendimiento de las sentencias a ejecutar sobre la BD
7. BASES DE DATOS DISTRIBUIDAS Y RECUPERACIÓN.
Suponiendo que se quisiera tener la base de datos distribuida, analizar con la bibliografía que se estime necesaria, cómo se realiza la recuperación en bases de datos distribuidas.
8. OTRAS ACTIVIDADES (VOLUNTARIO)
Las siguientes actividades son voluntarias, pudiendo realizar si se desea sólo una de ellas:
a) Crear la BD con tamaño fijo de fichero primario y añadir uno o más secundarios. Realizar la carga de datos y comprobar el llenado de cada fichero. Después, insertar nuevos datos para comprobar la nueva situación del llenado de los ficheros.
b) Creación de copias duplicadas de la base de datos con la opción CREATE SHADOW, detallando su funcionamiento.
NORMAS Y PLAZOS DE ENTREGA
La práctica es obligatoria y representa un 30% de la nota final en la asignatura. Se realizará en grupos de dos personas. Para optar a la calificación de sobresaliente en la práctica deberá implementarse la parte opcional. Para aprobar la práctica se deberá:
A. Entregar y aprobar la memoria de la práctica, que incluirá obligatoriamente:
1. Portada, especificando el nombre de la asignatura, los autores (incluyendo el número de matrícula) y la fecha de entrega.
2. Indice con numeración de los apartados, y el número de página donde se encuentren en la memoria.
3. Solución a cada uno de los apartados solicitados. En ellos aparecerá obligatoriamente el planteamiento seguido para solucionarlo, el contenido del fichero o ficheros SQL utilizados, así como una descripción de las opciones del gestor que se hayan ejecutado para la resolución.
4. Conclusiones
5. Como anexo 1 se acompañará el esquema completo de la base de datos (opción View MetaData en el menú
Database de IBConsole). Y como anexo 2, se incluirá una copia del contenido de los ficheros SQL, sin formatear.
B. Aprobar el examen de la práctica que tendrá lugar al mismo tiempo que el examen de teoría de la asignatura. Obviamente, el examen de la práctica podrá realizarse siempre y cuando se haya entregado la memoria de la práctica.
??La memoria de la práctica podrá entregarse personalmente a los profesores de la asignatura en horario de tutorías hasta el día del examen de la asignatura. La práctica para la convocatoria de Septiembre será la misma que para la de Junio. El límite de entrega será el examen de la asignatura en Septiembre.
ANEXO 1. SENTENCIAS SQL
Las siguientes sentencias se utilizarán para realizar el estudio de índices. Consulta 1
SELECT *
FROM clientes
WHERE cast(codpostal As integer) > 3000
ORDER BY apellido1, apellido2 Consulta 2
SELECT nif, apellido1, apellido2, nombre, telefono, saldo, fechacaducidad FROM clientes c, cuentas cu, tarjetas t
WHERE apellido1 = 'Pulido' AND telefono Is Not Null AND
c.idcliente=cu.idcliente AND cu.numcuenta=t.numcuenta ORDER BY telefono
Comprobar que efectivamente solo se muestran filas que tengan un valor en el atributo telefono (valor no nulo). Si no es así, realizar las acciones correctoras en la base de datos para que no s algan las filas sin número de teléfono. Consulta 3
SELECT direccion, localidad, sum(importe) as ingresos FROM sucursales s, opersucursal o
WHERE numempleados > 3 AND tipooperacion= 1 AND s.sucursal=o.sucursaloper
GROUP BY direccion, localidad ORDER BY 3,localidad
Consulta 4
SELECT numcajero, fechaoperacion, SUM(importe) As reintegro FROM tarjetas t, opertarjeta o
WHERE t.idtarjeta=o.idtarjeta
GROUP BY numcajero, fechaoperacion HAVING SUM(importe) >20000
Consulta 5
Definir una nueva consulta que no guarde parecido a las anteriores, de manera que creando los índices necesarios se reduzca el tiempo de ejecución, justificando el porqué de la reducción de tiempo.
ANEXO 2. ESQUEMA DE BASE DE DATOS
CLIENTES:ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
Nif Char (9) No nulo; Clave Primaria Nif del cliente
IDCliente Integer No nulo Código único por cliente Nombre Char (15) No nulo Nombre de pila del cliente Apellido1 Char (15) No nulo Apellido 1º del cliente Apellido2 Char (15) No nulo Apellido 2º del cliente Direccion Char (30) No nulo Calle y número de residencia Localidad Char (30) No nulo Localidad de residencia
CodPostal Char (5) No nulo Código Postal
Telefono Char (9) Teléfono
FechaNacimiento Date No nulo Fecha de Nacimiento SUCURSALES:
ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
Sucursal Smallint No nulo; Clave Primaria Código único por sucursal Direccion Char (30) No nulo Calle y número
Localidad Char (30) No nulo Localidad
CodPostal Char (5) No nulo Código Postal
Director Char (35) Director de la Sucursal
NumEmpleados Smallint No nulo Nº de Empleados en la sucursal Categoria Char(1) No nulo Categoría de la sucursal CUENTAS:
ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
NumCuenta Integer No nulo; Clave Primaria Código único por cuenta
IdCliente Integer No nulo Código de cliente
Sucursal Smallint No nulo sucursal
Tipo Char (1) Tipo de cuenta
FechaApertura Date No nulo Fecha Apertura de la cuenta Preferencial Char(1) No nulo Si es o no, cuenta preferencial Saldo Decimal(8,2) No nulo Saldo en euros de la cuenta TARJETAS:
ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
IdTarjeta Integer No nulo; Clave Primaria Código único por tarjeta
IdCliente Integer No nulo Código de cliente
NumCuenta Integer No nulo Número de la cuenta asociada Tipo Char (1) No nulo Tipo de tarjeta (Normal, Visa, Oro)
FechaCaducidad Date Fecha de caducidad de la tarjeta
OPER_SUCURSAL:
ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
IdOperacion Integer No nulo; Clave Primaria Código único por operación
NumCuenta Integer No nulo Número de cuenta
SucursalOper Smallint No nulo Sucursal donde se realiza la operación FechaOperaqcion Date No nulo Fecha de realización de la operación Importe Decimal(8,2) No nulo Cantidad en Euros de la operación TipoOperacion Char (1) No nulo Tipo de operación realizada OPER_TARJETA:
ATRIBUTO TIPO RESTRICCIONES DESCRIPCION
IdOperacion Integer No nulo; Clave Primaria Código único por operación IdTarjeta Integer No nulo Número de la tarjeta
NumCajero Smallint No nulo Número de cajero
FechaOperacion Date No nulo Fecha de realización de la operación Importe Decimal(8,2) No nulo Cantidad en Euros de la operación TipoOperacion Char (1) No nulo Tipo de operación realizada
Los ficheros de texto para la carga inicial de la BD y el enunciado de la práctica se encuentran en el ftp de la escuela