EXAMEN DISEÑO DE BASES DE DATOS Y SEGURIDAD DE LA INFORMACIÓN (25 de junio de 2007) 2o Parcial Autorizo la publicación de la nota del examen junto a mis datos personales: SI NO Nombre y Apellidos: TITULACIÓN (Sistemas/Gestión): GRUPO (A/B): Tiene 1.30 hora para realizar el examen. Puntuación Total: 10 puntos Apartado A (6.5 puntos): 1 2 1.5 0.5 0.5 1 Responda el apartado A en las propias hojas del examen. 1) (1 punto) Diga la forma normal más avanzada en la que se encuentra cada uno de los siguientes esquemas de relación. No es necesaria ninguna justificación: 1) R ({A, B, C, D }, {A, B, D → C}) FNBC 2) R ({A, B, C, D }, {A → B}) 1FN 3) R ({A, B, C }, {A → B, 4) R ({A, B, C}, {A ↔ B}) 3FN 5) R ({A, B, C }, {A → B, A → C}) FNBC 6) R ({A, B }, {A ↔ B, A → B}) FNBC 7) R ({A, B, C, D }, {A → B, B, C → A }) 3FN 8) R ({A, B, C }, {A → B, B → C, A → C}) 2FN 9) R ({A, B, C, D }, {A → B, B → C, C → B}) 1FN 10) R ({A, B }, {A ↔ B}) FNBC B → C}) 2FN 2) (2 puntos) Dado el siguiente esquema (que ya es mínimo): R ({A, B, C, D, E, F }, {A → B, B → C, C, D → E }) 2.1) (0.5 puntos) Calcule, de manera justificada, todas sus claves. A y D pertenecen a la K, por ser siempre implicantes. F también, por ser independiente. Como el cierre de {A, D, F} contiene a todos los atributos, es clave única 2.2) (0.5 puntos) Describa el método de síntesis, y obtenga un conjunto de esquemas de relación aplicando dicho algoritmo de síntesis que garantiza esquemas en 3FN, conservando la información y las dependencias. De acuerdo al método, una vez tenemos el conjunto mínimo, creamos un esquema por cada dependencia (o conjunto de DF con igual implicante) y, caso de no estar contenida en alguno de los esquemas, uno que contenga a la clave. Es decir: R1 ({A, B}, {A → B}) R2 ({B, C}, {B → C }) R3 ({C, D, E}, {C, D → E }) R4 ({A, D, F }, { Ø }) 2.3) (1 punto) Obtenga un conjunto de esquemas de relación aplicando el algoritmo de análisis (descomposición) hasta obtener un conjunto de esquemas en FNBC, verificándose que en cada paso se conservan la información y las dependencias. R1 ({C, D, E}, {C, D → E }) R’ ({A, B, C, D, F }, { A → B, B → C }) R2 ({B, C }, R’’ ({A, B, D, F }, {B → C }) { A → B}) R3 ({A, B}, { A → B}) R4 ({A, D, F }, { Ø }) Claramente en todos los pasos se verifica que se conservan las DF. Además, se conserva la información, ya que siempre se cumple que: - (A1∩A2)→(A1-A2) ó - (A1∩A2)→(A2-A1) Examen de Diseño de Bases de Datos y Seguridad de la Información 25 de junio de 2007 Nombre y Apellidos: 3) (1.5 puntos) Dado el siguiente esquema E/R: (1,3) A I (0,n) a B b Marque las casillas correspondientes a las cardinalidades que SÍ están recogidas en las siguientes transformaciones. Se indican los atributos que admiten nulos (NULL), los que no admiten nulos (NN) y las claves alternativas (UNIQUE): (1,3) (0,n) (1,3) (0,n) A(a) NN B(b, CodA) A(a) NULL B(b, CodA) A(a) B(b) A(a, CodB) B(b) NULL I(CodA, CodB) A(a) B(b) A(a) B(b) UNIQUE NN NULL I(CodA, CodB) I(CodA, CodB) Solución: (1,3) (0,n) (1,3) A(a) NN B(b, CodA) A(a) NULL B(b, CodA) A(a) B(b) A(a) B(b) I(CodA, CodB) I(CodA, CodB) A(a) B(b) A(a) B(b) NN UNIQUE NN I(CodA, CodB) NULL I(CodA, CodB) (0,n) 4) (0.5 puntos) Marque la casilla verdadero (V) o falso (F) en las siguientes afirmaciones: Como norma general, los índices de una tabla de una base de datos relacional… V F □■ □■ No ocupan espacio en memoria ■□ Son útiles para mejorar el rendimiento de algunas consultas a la tabla Interesa tener índices por todos los atributos, sobre todo cuando hay muchas actualizaciones 5) (0.5 puntos) Describa, muy brevemente, las posibles alternativas para simular la implementación del dominio {‘Rojo’, ‘Verde’, ‘Azul’} en un SGBD que no permita la creación de dominios. Existen varias posibilidades. Las más sencillas son por medio de un check o por medio de una tabla que contenga un único atributo y tantas filas (en este caso, tres) como valores del dominio (aquellas columnas que tomen valores en este dominio, las pondremos como clave ajena de esta tabla). Otras posibilidades son utilizar disparadores (triggers), aserciones… 6) (1 punto) Dado el siguiente esquema (por sencillez, no se incluyen atributos) y su transformación: a A I (0,n) B b (1,n) TA(a) TC(CodA) C D TD(CodA) TI(CodA,CodB) TB(b) 6.1) Realice una aserción que controle la cardinalidad mínima 1 en B CREATE ASSERTION A1 CHECK NOT EXISTS (SELECT a FROM TA WHERE a NOT IN (SELECT CodA FROM TI)); 6.2) Realice una aserción que controle la exclusividad CREATE ASSERTION A2 CHECK NOT EXISTS (SELECT CodA FROM TC WHERE CodA IN (SELECT CodA FROM TD)); Examen de Diseño de Bases de Datos y Seguridad de la Información 25 de junio de 2007 Nombre y Apellidos: Apartado B (3.5 puntos): 1.5 1 1 Responda el apartado B en las propias hojas del examen. Dado el siguiente esquema relacional: PELICULAS (Título, Director, Num_Cines) CINES (Nombre, Direccion) PROYECCIONES (Cine, Pelicula, Sala) y las correspondientes sentencias de creación de tablas en SQL: CREATE TABLE Peliculas ( Titulo VARCHAR2(50) PRIMARY KEY, Director VARCHAR2(30), Num_Cines NUMBER DEFAULT 0); -- Num_cines es un atributo calculado que contiene el número de cines --en los que se proyecta la película CREATE TABLE Cines ( Nombre VARCHAR2(50) PRIMARY KEY, Direccion VARCHAR2(50)); CREATE TABLE Proyecciones ( Cine VARCHAR2(50), Pelicula VARCHAR2(50), sala NUMBER, PRIMARY KEY (Cine, Pelicula), FOREIGN KEY (Pelicula) REFERENCES Peliculas, FOREIGN KEY (Cine) REFERENCES Cines); Responda a las siguientes preguntas de forma breve y concisa. 1. (1.5 puntos) Dado el código del siguiente disparador: CREATE OR REPLACE TRIGGER T_Peliculas BEFORE DELETE ON Peliculas FOR EACH ROW DECLARE V_cines Peliculas.Num_Cines%TYPE; BEGIN SELECT Num_Cines INTO V_cines FROM Peliculas WHERE Titulo = :OLD.Titulo; IF (V_cines > 0) THEN RAISE_APPLICATION_ERROR(-20001, 'No se puede eliminar esta película'); END IF; END T_Peliculas; a) Explique el propósito y funcionamiento de dicho disparador. (0,75 puntos) La finalidad del disparador es impedir la eliminación de una película que esté proyectándose en alguna sala. Para ello, cada vez que se intenta eliminar una fila de la tabla Peliculas se comprueba el valor del atributo num_cines de dicha fila. Si su valor es mayor que 0, entonces es que la película está proyectándose en algún cine y se eleva una excepción para impedir que se ejecute la sentencia de borrado. b) ¿Funcionaría (en ejecución) correctamente el disparador en Oracle? Razone su respuesta. (0,75 puntos) No. En el cuerpo del disparador se intenta realizar una consulta sobre una tabla mutante (tabla que está siendo modificada por una operación DML). Examen de Diseño de Bases de Datos y Seguridad de la Información 25 de junio de 2007 Nombre y Apellidos: 2. (1 punto) Dado el código de la siguiente vista, que devuelve las proyecciones de las películas en las salas de los distintos cines junto con la dirección del cine correspondiente: CREATE VIEW V_Peliculas_Cine AS SELECT p. Pelicula, p.Cine, c.Direccion, p.Sala FROM Proyecciones p, Cines c WHERE p.Cine = c.Nombre; y el siguiente disparador: CREATE OR REPLACE TRIGGER T_Peliculas_Cine INSTEAD OF INSERT ON V_Peliculas_Cine BEGIN INSERT INTO Cines VALUES (:NEW.Cine, :NEW.Direccion); INSERT INTO Proyecciones VALUES (:NEW.Cine, :NEW.Pelicula, :NEW.Sala); END; / a) Explique el propósito y funcionamiento de dicho disparador. Solución: (0,5 puntos) La finalidad del disparador es simular la inserción sobre la vista V_Peliculas_Cine, realizando las inserciones en las correspondientes tablas. b) La ejecución de este trigger ¿produciría un error de tabla mutante? Razone su respuesta. Solución: (0,5 puntos) No, porque la definición del disparador lo hace imposible: al ser un disparador de tipo INSTEAD_OF, está definido sobre una vista y por lo tanto la sentencia que dispara el trigger no afecta directamente a ninguna tabla, con lo que no hay tablas mutantes asociadas a este disparador. 1. (1 punto) Dada la siguiente relación ALUMNO con seguridad multinivel: Núm_Matricula Curso Nombre Nivel_Atención Nota Final CT 001 U 1 U Mariano C Escaso S Aprobado C S 002 U 2 U María S Alto TS Notable TS C La clave estará formada por los atributos Núm_Matricula y Curso. a) ¿Qué pasaría cuando un usuario con clasificación de seguridad S realice la siguiente consulta “SELECT * FROM ALUMNO”? Solución: (0,5 puntos) Se producirá un proceso de filtrado, introduciendo valores nulos para los valores de los atributos cuya clasificación de seguridad es más alta que la del usuario. La tupla primera se vería completamente, mientras que en la segunda veríamos un NULL en el atributo Nivel_Atención. b) Explique el concepto de poliinstanciación. Ponga un ejemplo en el que se produzca este fenómeno. Solución: (0,5 puntos) Se producirá una poliinstanciación cuando un usuario por ejemplo de nivel de seguridad S intente modificar el atributo Nivel_Atención de la segunda tupla, introduciendo varias tuplas con el mismo valor de clave aparente pero diferentes valores de atributos para los usuarios con diferentes niveles de seguridad.