CUESTIONARIO DE BASES DE DATOS 1/9/2000. • Rellene con las respuestas correctas el casillero adjunto. • Cada cuestión vale 0.25 puntos. Sólo hay una opción correcta. Cada cuestión mal contestada anula 1/3 de cuestión correcta, por lo tanto la nota obtenida en el test es el resultado de la siguiente fórmula: (Bien_Contestadas − Mal_contestadas/3)*0.25. 1. ¿Qué organización de almacenamiento es poco eficiente para el acceso ordenado a los registros de datos? a) b) c) d) Fichero disperso Índice ordenado de un nivel primario Índice multinivel Índice multinivel dinámico de tipo árbol B 2. ¿Cuál de las siguientes herramientas es utilizada por el sistema de gestión de bases de datos para asegurar la atomicidad y persistencia de las transacciones? a) b) c) d) Módulo de comprobación de la integridad Fichero diario Módulo de ejecución de los disparadores Unidad de mantenimiento de la corriente eléctrica 3. ¿Cuáles son las dos formas de comprobación de la integridad que disponen los sistemas de gestión de bases de datos que cumplen el estándar SQL/92? a) b) c) d) Diferida e inmediata Segura y parcial Diferida y comprobación flexible Sólo disponen de una forma 4. Dado el siguiente esquema relacional Alumno(exp:entero, nombre:tira(40), alojamiento:tira(30), edad:entero) CP: {exp} Practica(exp:entero, deporte:tira(20)) CP: {exp, deporte} y la siguiente expresión en SQL/92 SELECT DISTINCT alojamiento FROM Alumno WHERE edad>22 ¿Cuál es la expresión en SQL/92 equivalente en la que no se use la palabra DISTINCT? a) SELECT alojamiento FROM Alumno WHERE edad>22 b) SELECT alojamiento FROM Alumno WHERE edad>22 AND (SELECT COUNT (alojamiento) FROM Alumno) = 1 c) No existe d) SELECT alojamiento FROM Alumno WHERE edad>22 GROUP BY alojamiento 5. ¿Por qué motivo no siempre es cierta la igualdad de expresiones del Álgebra Relacional sobre el esquema de la cuestión 4? (Alumno Practica)[exp] = Alumno [exp] ∪ Practica[exp] a) Pueden existir tuplas con un valor en el atributo exp de la relación Alumno que no es idéntico al valor del atributo exp de alguna tupla de la relación Practica o existen tuplas con un valor en el atributo exp de la relación Practica que no es idéntico al valor del atributo exp de alguna tupla de la relación Alumno b) Pueden existir tuplas con un valor en el atributo exp de la relación Alumno que no es idéntico al valor del atributo exp de alguna tupla de la relación Practica c) Pueden existir tuplas con un valor en el atributo exp de la relación Practica que no es idéntico al valor del atributo exp de alguna tupla de la relación Alumno d) Pueden existir tuplas en la relación Practica con valor nulo en el atributo exp 6. En el siguiente esquema relacional en SQL/92, correspondiente a la relación Alumno del esquema relacional de la cuestión 4 con alguna modificación CREATE TABLE Alumno( exp INTEGER CONSTRAINT clave_primaria PRIMARY KEY DEFERRABLE, nombre CHAR(40), alojamiento CHAR(30), edad INTEGER, compañero INTEGER NOT NULL UNIQUE CONSTRAINT clave_ajena REFERENCES Alumno DEFERRABLE, CONSTRAINT diferentes CHECK(exp <> compañero) DEFERRABLE) ¿Cómo habría que dar de alta nuevos alumnos en la base de datos? a) Mediante una transacción que inserta dos nuevos alumnos, cada uno compañero del otro, y obligatoriamente con todas las restricciones comprobadas en modo diferido b) Mediante una transacción que inserta dos nuevos alumnos, cada uno compañero del otro, y con la restricción clave_ajena comprobada en modo inmediato c) Mediante una transacción que inserta dos nuevos alumnos, cada uno compañero del otro, y con la restricción clave_ajena comprobada en modo diferido d) No se puede porque existe una dependencia cíclica entre el alumno y su compañero 7. ¿De qué forma se minimizan las pérdidas de memoria principal que afectan a la gestión del fichero de diario? a) b) c) d) Con una manipulación en la que intervienen al mínimo los buffers intermedios Mediante el uso de una doble copia en disco Con un sistema de soporte de corriente eléctrica Mediante el uso de puntos de verificación ANULADA 8. Sea el siguiente esquema relacional: ASIGNATURA(código: dom_asg, nombre: dom_nom) CP: {código} PRERRE(código: dom_asg, pre: dom_asg) CP: {código, pre} CAj: {pre} → Asignatura f(pre) =código CAj: {código} → Asignatura g(código) =código donde cada tupla de la relación PRERRE representa la información sobre los prerrequisitos de una asignatura: código de la asignatura (código) y código de una asignatura que es prerrequisito de ella (pre), ¿qué estructura tiene el plan de estudios?: a) Una asignatura sólo puede tener un prerrequisito b) Cualquier asignatura puede tener varios prerrequisitos pero sólo puede ser a su vez prerrequisito de una asignatura c) Cualquier asignatura puede tener varios prerrequisitos y ser a su vez prerrequisito de cualquier número de ellas d) Toda asignatura debe tener un prerrequisito 9. En la base de datos de la cuestión 8 ¿qué expresión de álgebra relacional selecciona todas las asignaturas que no tienen prerrequisitos? a) b) c) d) ASIGNATURA [código] − PRERRE [código] ASIGNATURA [código] − PRERRE [pre] (pre, código) PRERRE [pre] (ASIGNATURA [código] (código,pre) − PRERRE [pre] ) PRERRE [pre] (pre, código) − ASIGNATURA [código] 10.En la base de datos de la cuestión 8 ¿a qué requerimiento responde la siguiente expresión de álgebra relacional? PRERRE [código] − PRERRE [pre] (pre, código) a) b) c) d) Asignaturas que tienen prerrequisitos y no son prerrequisito de ninguna asignatura Asignaturas que tienen prerrequisitos Asignaturas que son prerrequisito de alguna pero no tienen prerrequisitos Asignaturas que no son prerrequisitos de ninguna asignatura 11.En la base de datos de la cuestión 8, si se incluye la directriz de Borrado en Cascada para la clave ajena {código} de la relación Prerre, ¿qué efecto tendría la operación DELETE Asignatura WHERE código="AD8"? a) Borraría la tupla de Asignatura con código AD8 sólo si no tuviera prerrequisitos b) Borraría la tupla de Asignatura con código AD8 y todas las tuplas de Asignatura que fueran sus prerrequisitos c) Borraría la tupla de Asignatura con código AD8 y todas las tuplas de Prerre que representaran sus prerrequisitos, sólo en el caso de que la asignatura AD8 no fuera prerrequisito de otras d) Borraría la tupla de Asignatura con código AD8 y todas las tuplas de Prerre que tuvieran el valor AD8 en el atributo pre 12.En la base de datos de la cuestión 8, ¿qué propiedad expresa la siguiente restricción de integridad escrita en SQL? CREATE ASSERTION CHECK (NOT EXISTS (SELECT * FROM Prerre P1 WHERE EXISTS (SELECT * FROM Prerre P2 WHERE (P1.código=P2.pre AND P2.código=P1.pre))) a) Una asignatura no puede tener dos prerrequisitos b) Si una asignatura A1 tiene a otra A2 como prerrequisito, entonces A1 no puede ser prerrequisito de A2 c) Una asignatura puede ser prerrequisito de si misma d) Toda asignatura es prerrequisito de otra 13.Un SGBD ofrece independencia física si: a) Ofrece distintas implementaciones para las estructuras de datos del modelo de datos subyacente b) Permite la definición de esquemas externos c) El modelo de datos subyacente contempla el uso de distintas estructuras de datos d) Los programas de acceso a la base de datos son independientes de los cambios realizados en la implementación de las estructuras de datos del esquema lógico 14.Los índices en árbol garantizan el mismo número de accesos a bloques de disco para recuperar cualquier registro de datos: a) b) c) d) Siempre Sí si son de búsqueda Sí si son árboles B+ Sí si son árboles B BASES DE DATOS 1/9/2000 El siguiente esquema relacional representa el sistema de información de un servicio de urgencias sanitarias domiciliarias: Personal(dni:d_dni, nombre:d_nom, categoría:d_cat, tfno:d_tfn, edad: d_edad) CP: {dni} VNN: {nombre} VNN: {categoría} Material(codm: d_cod, descripción: d_desc, precio:d_precio) CP: {codm} VNN: {precio} Vehículo (matrícula: d_mat, tipo: d_tipo) CP: {matrícula} VNN: {tipo} Salida(cods:d_cod, motivo:d_mot, matrícula:d_mat, coste_material:d_coste, fecha:d_fecha) CP: {cods} CAj: {matrícula}→ Vehículo VNN: {motivo} VNN: {fecha} PersonalSal(cods: d_cod, dni: d_dni) CP: {cods,dni} CAj: {cods}→ Salida CAj: {dni}→ Personal MaterialSal(cods: d_cod, codm: d_cod, cantidad: d_cant) CP: {cods,codm} CAj: {cods}→ Salida CAj: {codm}→ Material donde los atributos tienen el siguiente significado: Personal: dni: D.N.I. del sanitario nombre: nombre del sanitario categoría: [‘médico’, ‘ATS’, ‘celador’] tfno: teléfono particular del sanitario edad: del sanitario Material: codm: código del material descripción: del material Vehículo: matrícula: matrícula del vehículo precio: precio unitario tipo: [‘ambulancia’, ‘coche’] Salida: cods: código de la salida domiciliaria motivo: de la salida matrícula:del vehículo utilizado coste_material: total en pesetas del material utilizado en la salida fecha: de la salida PersonalSal: En la salida de código cods ha participado el sanitario de D.N.I. dni MaterialSal: En la salida de código cods se han utilizado cantidad unidades del material de código codm DESPUÉS DE LEER ATENTAMENTE EL ESQUEMA RELACIONAL ANTERIOR, RESUELVA LOS SIGUIENTES EJERCICIOS. 1. Resuelva las siguientes cuestiones sobre el esquema anterior (justifique brevemente las respuestas): a) ¿Un miembro del personal sanitario puede participar en más de una salida en un mismo día? (0.25) b) ¿Puede haber alguna salida sin vehículo y sin personal sanitario asignado? (0.25) 2. Expresar la siguiente restricción en CRT. “En toda salida con vehículo de tipo ‘ambulancia’ debe haber por lo menos un ‘médico’ ” (0.75) 3. El atributo coste_material de la relación Salida es una información derivada que se debe mantener actualizada en todo momento. a) Enumere qué operaciones sobre la base de datos podrían afectar a esta restricción. (0.5) b) Diseñe un disparador (“trigger”) de ORACLE8 para controlar alguna de las operaciones enumeradas. (0.5) 4. Resuelva las siguientes cuestiones en SQL/92 sobre el esquema anterior: a) Obtener el código y coste de material de las salidas sin vehículo. (0.25) b) Indicar cuántos días ha sido utilizado el vehículo de matrícula ‘V-3333-LO’. (0.25) c) Obtener el dni, el nombre y la edad de los miembros del personal más viejos. (0.25) d) Obtener el DNI y nombre de los médicos que no han participado en ninguna salida. (0.5) e) Obtener los materiales (código y descripción) utilizados que sean comunes a todas las salidas con vehículo de tipo “ambulancia”. (1) f) Obtener los vehículos (matrícula y tipo) que hayan realizado el máximo número de salidas. (1) g) Obtener la matrícula y tipo de los vehículos en los que entre todas sus salidas han participado todos los ATS. (1) BASES DE DATOS SEPTIEMBRE 2000 SOLUCIONES 1) a) Sí, ya que puede haber más de dos salidas en un día, y no hay ninguna restricción que impida que la misma persona esté en todas estas salidas. b) Sí, ya que “matrícula” puede ser nulo y puede haber salidas sin “personalsal” asociados.: 2) VX: VEHICULO, SX: SALIDA, PSX: PERSONALSAL, PX: PERSONAL ∀SX∀VX ((SALIDA(SX) ∧ VEHICULO(VX) ∧ SX.matrícula = VX.matrícula ∧ VX.tipo = ‘ambulancia’)) → ∃PSX, PX (PERSONALSAL(PSX) ∧ PERSONAL(PX) ∧ PSX.dni = PX.dni ∧ PX.categoría = ‘médico’ ∧ PSX.cods = SX.cods)) o bien, ¬∃SX∃VX (SALIDA(SX) ∧ VEHICULO(VX) ∧ SX.matrícula = VX.matrícula ∧ VX.tipo = ‘ambulancia’ ∧ ¬∃PSX, PX (PERSONALSAL(PSX) ∧ PERSONAL(PX) ∧ PSX.dni = PX.dni ∧ PX.categoría = ‘médico’ ∧ PSX.cods = SX.cods)) y cualquier expresión equivalente a las anteriores. 3) a) b) 4) INSERCIÓN en SALIDA *(PONER A 0 EL ‘coste_material’) MODIFICACIÓN del atributo ‘coste_material’ en SALIDA *(PROHIBIDA) INSERCIÓN en MATERIALSAL MODIFICACIÓN del atributo 'cods' de MATERIALSAL MODIFICACIÓN del atributo 'codm' de MATERIALSAL MODIFICACIÓN del atributo 'cantidad' de MATERIALSAL BORRADO en MATERIALSAL MODIFICACIÓN del atributo ‘precio’ en MATERIAL CREATE TRIGGER T1 AFTER INSERT ON MATERIALSAL FOR EACH ROW DECLARE aux NUMBER; BEGIN SELECT M.precio * :new.cantidad INTO aux FROM MATERIAL M WHERE M.codm = :new.codm; UPDATE SALIDA S SET coste_material = coste_material + aux WHERE S.cods = :new.cods; END; a) SELECT S.cods, S.coste_material FROM salida S WHERE S.matrícula IS NULL; b) SELECT COUNT(DISTINCT S.fecha) FROM salida S WHERE S.matrícula = ‘V-3333-LO’; c) SELECT P.dni, P.nombre, P.edad FROM personal P WHERE P.edad = (SELECT MAX(edad) FROM personal); d) SELECT P.dni, P.nombre FROM personal P WHERE P.categoría = ‘médico’ AND NOT EXISTS (SELECT * FROM personalsal PS WHERE PS.dni = P.dni); e) SELECT M.codm, M.descripción FROM material M WHERE NOT EXISTS (SELECT * FROM salida S, vehículo V WHERE S.matrícula = V.matrícula AND V.tipo = ‘ambulancia’ AND NOT EXISTS (SELECT * FROM materialsal MS WHERE M.codm = MS.codm AND MS.cods = S.cods)) AND EXISTS (SELECT * FROM salida S2, vehículo V2 WHERE S2.matrícula = V2.matrícula AND V2.tipo = ‘ambulancia’); f) SELECT V.matrícula, V.tipo FROM vehículo V, salida S WHERE V.matrícula = S.matrícula GROUP BY V.matrícula, V.tipo; HAVING COUNT(*) >= ALL ( SELECT COUNT(*) FROM vehículo V2, salida S2 WHERE V2.matrícula = S2.matrícula GROUP BY V2.matrícula ); SELECT V.matrícula, V.tipo FROM vehículo V WHERE NOT EXISTS (SELECT * FROM personal P WHERE P.categoría = ‘ATS’ AND NOT EXISTS (SELECT * FROM salida S, personalsal PS WHERE S.matrícula = V.vehículo AND S.cods = PS.cods AND PS.dni = P.dni)) AND EXISTS (SELECT * FROM personal P WHERE P.cateogría = ‘ATS’); g) CUESTIONARIO DE BASES DE DATOS 1/9/2000. Q 1 2 3 4 5 6 7 8 9 10 11 12 13 14 A A B A D A C Anul C A A C B D C B B B C Anul C C C D C B B C B D C A C A D B C D D A D B A Anul D D B D A D B A A A A D D A Anul A E B D A D C Anul B A A D C D D B SOLUCIONES F C C B C A Anul A B B A B C C A Al anularse una pregunta, la fórmula a aplicar es: (Bien - Mal / 3.0) * 0.27