Examen Junio 2011 (2011)

Examen Español
Universidad Universidad Politécnica de Valencia (UPV)
Grado Ingeniería Informática - 3º curso
Asignatura Base de Datos
Año del apunte 2011
Páginas 11
Fecha de subida 26/11/2014
Descargas 4
Subido por

Descripción

Examen resuelto de Base de Datos de Junio 2011

Vista previa del texto

EXAMEN DE BASES DE DATOS – 31/05/11 ESQUEMA DE TRABAJO Sea el siguiente esquema relacional al que se hará referencia como ESQUEMA de TRABAJO, que recoge información sobre películas.
PELÍCULA(cod_peli:entero, título:tira(40), año:entero, duración:real, cod_lib:entero) CP: {cod_peli} VNN: {título, año, duración} CAj: {cod_lib}  LIBRO Borrado a nulos Modificación en cascada ACTOR (cod_act: entero, nombre: tira(40), fecha_nac: fecha, país: tira(30)) CP: {cod_act} VNN: {nombre} GÉNERO (cod_gen: entero, nombre: tira(10)) CP: {cod_gen} Uni: {nombre} VNN:{nombre} LIBRO(cod_lib:entero, título:tira(40), año:entero, autor: tira(40)) CP: {cod_lib} VNN: {título, año} INTERVIENE (cod_peli: entero, cod_act: entero, papel: tira(20)) CP: {cod_peli, cod_act} VNN: {papel} CAj: {cod_peli}  PELÍCULA Borrado restrictivo Modificación en cascada CAj: {cod_act}  ACTOR Borrado restrictivo Modificación en cascada CLASIFICACIÓN(cod_peli:entero, cod_gen:entero) CP: {cod_peli, cod_gen} CAj: {cod_peli}  PELÍCULA Borrado restrictivo Modificación en cascada CAj: {cod_gen}  GÉNERO Borrado restrictivo Modificación en cascada Donde las distintas relaciones y sus atributos tienen el siguiente significado: PELÍCULA: de cada película se almacena, además de un identificador único (cod_peli), su título, el año en que se rodó, la duración en minutos y el libro en el que se basó (si es que existe).
ACTOR: de cada actor se almacena, además de un identificador único (cod_act), su nombre, su fecha de nacimiento y el país de origen.
GÉNERO: de cada género se almacena, además de un identificador único (cod_gen), el nombre que lo describe.
LIBRO: de cada libro se almacena, además de un identificador único (cod_lib), su título, el año en que se escribió y el autor.
INTERVIENE: indica en qué películas ha intervenido cada actor especificando en el atributo papel el tipo de intervención que ha tenido en la misma (principal o secundario).
CLASIFICACIÓN: indica de qué género es cada película.
A continuación se incluye una base de datos para el Esquema de trabajo, a la que se llamará BD Película cod_peli título año 1 El premio 1963 2 Cortina rasgada 1966 3 Sonrisas y lágrimas 1965 duración 134 128 174 cod_lib 1 ¿ 2 4 Desayuno con diamantes 1961 115 3 5 6 7 8 My Fair Lady Dos hombres y un destino El golpe El rey león 1964 1969 1973 1994 170 110 129 89 4 ? ? ? Actor cod_act nombre 1 Paul Newman 2 Elke Sommer 3 Julie Andrews fecha_nac país 26/1/1925 USA 05/11/1940 Alemania 01/10/1935 UK Género cod_gen nombre G1 Acción G2 Drama G3 Western 4 Ludwig Donath 06/03/1900 Austria G4 Policiaca 5 6 7 8 9 10 11 Christopher Plummer Audrey Hepburn George Peppard José L. de Villalonga Rex Harrison Stanley Holloway Robert Redford 13/12/1929 04/05/1929 01/10/1928 29/01/1920 05/03/1908 01/10/1890 18/08/1936 Canadá Bélgica USA España UK UK USA G5 Misterio G6 Thriller G7 Musical G8 Comedia G9 Romántica Libro cod_lib título 1 El premio Nobel 2 The sound of music 3 Desayuno en Tiffany’s año 1962 1960 1958 autor Irwing Wallace Howard Lindsay Truman Capote 4 Pigmalion 1913 George B. Shaw 5 La caída de los gigantes 2010 Ken Follet Interviene cod_peli cod_act papel 1 1 Principal 1 2 Principal 2 1 Principal Clasificación cod_peli cod_gen 1 G4 1 G2 1 G5 2 3 Principal 1 G6 2 3 3 4 4 4 5 5 5 6 6 7 7 4 3 5 6 7 8 6 9 10 1 11 1 11 Secundario Principal Principal Principal Principal Secundario Principal Principal Secundario Principal Principal Principal Principal 2 G5 2 G6 3 G7 3 G2 4 G8 4 G7 4 G9 5 G2 5 G7 5 G9 6 G3 7 G2 7 G4 7 G8 EXAMEN DE BASES DE DATOS – 31/05/11 PROBLEMAS Dado el ESQUEMA de TRABAJO presentado anteriormente, resuelva los siguientes ejercicios en SQL estándar.
1. Obtener el código, el título y el año de las películas que no se han basado en ningún libro. (0,25 puntos) SELECT cod_peli, titulo, año FROM Pelicula WHERE cod_lib IS NULL; 2. Obtener el código, el título y el año de los libros en los que no se ha basado ninguna película. (0,5 puntos) SELECT cod_lib, titulo, año FROM Libro L WHERE NOT EXISTS (SELECT * FROM Pelicula P WHERE L.cod_lib = P.cod_lib) O SELECT cod_lib, titulo, año FROM Libro WHERE cod_lib NOT IN (SELECT cod_lib FROM Pelicula WHERE cod_lib IS NOT NULL) 3. Obtener el número de películas en las que ha intervenido el actor de nombre ‘Paul Newman’. (0,5 puntos) SELECT COUNT(*) FROM Interviene I WHERE I.cod_act IN (SELECT cod_act FROM Actor WHERE nombre = ‘Paul Newman’); 4. Obtener el código, el nombre y la fecha de nacimiento de los actores que han intervenido en alguna película pero siempre en papeles secundarios. (1 punto) SELECT cod_act, nombre, fecha_nac FROM Actor A WHERE NOT EXISTS (SELECT * FROM Interviene I WHERE A.cod_act = I.cod_aut AND I.papel <> ‘Secundario’) AND EXISTS (SELECT * FROM Interviene I WHERE A.cod_act = I.cod_aut) 5. Obtener, para todas las películas de la base de datos, el título, la duración y el número de actores que han intervenido en ella. (0,75 puntos) SELECT P.titulo, P.duracion, COUNT(I.cod_act) FROM Pelicula P LEFT JOIN Interviene i ON P.cod_peli=I.cod_peli GROUP BY P.cod_peli, P.titulo, P.duracion 6. Obtener el código y el nombre de los géneros con mayor número de películas. (1 punto) SELECT cod_gen, nombre FROM Genero G WHERE (SELECT COUNT(*) FROM Clasificacion C WHERE G.cod_gen = C.cod_gen) = (SELECT MAX(COUNT(*)) FROM Clasificacion GROUP BY cod_gen); O SELECT cod_gen, nombre FROM Genero G, Clasificacion C WHERE G.cod_gen = C.cod_gen GROUP BY G.cod_gen, nombre HAVING COUNT(*) = (SELECT MAX(COUNT(*)) FROM Clasificacion GROUP BY cod_gen); 7. Obtener el número de países en los que han nacido actores que hayan intervenido en películas de ‘Acción’. (0,75 puntos) SELECT COUNT(DISTINCT pais) FROM Actor A WHERE EXISTS (SELECT * FROM Interviene I, Clasificación C, Genero G WHERE A.cod_aut = I.cod_act AND I.cod_peli = C.cod_peli AND C.cod_gen = G.cod_gen AND G.nombre = ‘Accion’); 8. Obtener el nombre de los actores que hayan intervenido más veces como principal que como secundario. (0,75 puntos) SELECT nombre FROM Actor A WHERE (SELECT COUNT(*) FROM Interviene I WHERE A.cod_aut = I.cod_act AND I.papel = ‘Principal’) > (SELECT COUNT(*) FROM Interviene I WHERE A.cod_aut = I.cod_act AND I.papel = ‘Secundario’); O SELECT nombre FROM Actor A, Interviene I WHERE A.cod_aut = I.cod_act AND I.papel = ‘Principal’ GROUP BY A.cod_act, A.nombre HAVING COUNT(*) > (SELECT COUNT(*) FROM Interviene I1 WHERE A.cod_aut = I1.cod_act AND I.papel = ‘Secundario’); 9. Si se añadiera un atributo cuantos_principales a la relación película que almacenara la cantidad de actores principales que intervienen en cada película y se quisiera controlar su valor mediante la definición de disparadores (triggers) a) Además de la modificación del atributo papel en la relación INTERVIENE, indicar las operaciones que puedan afectar a dicho atributo derivado. (0,5 puntos)      Modifiar cod_peli en INTERVIENE Insertar en INTERVIENE Borrar en INTERVIENE Insertar en PELÍCULA Modificar cuantos_principales en PELICULA b) Escribir un disparador que modifique la base de datos adecuadamente ante la la operación de modificar el atributo papel en la relación INTERVIENE. (0,5 puntos) CREATE TRIGGER cambio_papel AFTER UPDATE OF papel ON INTERVIENE FOR EACH ROW WHEN (old.papel<>new.papel) BEGIN IF (:old.papel =’Principal’ THEN UPDATE Pelicula SET cuantos_principales= cuantos_principales -1 WHERE cod_peli= :old.cod_peli); ELSE IF (:new.papel= ‘Principal’) THEN UPDATE Pelicula SET cuantos_principales=cuantos_principales +1 WHERE cod_peli= :new.cod_peli); END IF; END IF; END;  EXAMEN DE BASES DE DATOS – 31/05/11 CUESTIONARIO - TIPO A Este cuestionario consta de 14 cuestiones; para cada una se proponen cuatro respuestas, de las que sólo una es correcta. La respuesta se debe incluir en la hoja de respuestas que se entrega aparte. La valoración máxima del cuestionario es de 3,5 puntos. La nota obtenida se calcula con la fórmula (Bien_contestadas  Mal_contestadas/3)  0,25.
1. Dado el esquema de trabajo, ¿cuál de las siguientes afirmaciones es CIERTA? a) Sólo podemos borrar una película si no tiene actores que intervienen en ella y no está clasificada en ningún género.
b) Sólo podemos borrar una película si no tiene actores que intervienen en ella.
c) Sólo podemos borrar una película si no está clasificada en ningún género.
d) Sólo podemos borrar una película si no está basada en un libro.
2. Indicar la respuesta FALSA: a) Una película puede ser de varios géneros.
b) Una película puede no estar asociada a ningún género existente en la base de datos.
c) De una película puede que se desconozcan los actores que intervienen en ella.
d) Una película siempre estará basada en un libro.
3. Suponiendo actualización diferida de transacciones, si hay un fallo del sistema con pérdida de memoria principal, ¿qué acciones se deben llevar a cabo? a) Rehacer únicamente las transacciones confirmadas después del último punto de verificación.
b) Deshacer las transacciones no confirmadas y rehacer las transacciones confirmadas después del último punto de verificación.
c) Recuperar la última copia de seguridad y rehacer las transacciones confirmadas desde el último punto de verificación.
d) Recuperar la última copia de seguridad, deshacer las transacciones no confirmadas y rehacer las transacciones confirmadas desde el último punto de verificación.
4. ¿Cuál de las siguientes afirmaciones es CIERTA? a) Al registrarse un punto de verificación (‘checkpoint’) en el fichero diario, se graban en disco las actualizaciones de las transacciones que aparecen confirmadas en el diario desde el último punto de verificación.
b) Cuando falla una transacción deben eliminarse todas sus acciones del diario.
c) Ante un fallo del sistema deben volverse a ejecutar todas las transacciones que aparezcan como falladas en el diario.
d) En el fichero diario sólo se registran las transacciones realizadas en la base de datos que aparecen como confirmadas.
5. ¿Cuál es la cardinalidad de la relación definida por la siguiente expresión del Álgebra Relacional? Género [cod_gen] a) b) c) d) Card(Película) Card(Clasificación) Card(Clasificación) * Card(Género) Card(Género) Clasificación 6. Teniendo en cuenta el esquema de trabajo, ¿qué consulta resuelve la siguiente expresión del Álgebra relacional? (Actor (Actor[cod_act]–(Interviene donde papel =’Principal’)[cod_act])) [cod_act, nombre] a) Código y nombre de los actores que han intervenido en el papel Principal de alguna película.
b) Código y nombre de los actores que siempre han intervenido en el papel Principal de alguna película.
c) Código y nombre de los actores que han intervenido alguna vez en un papel que no es el papel Principal de alguna película.
d) Código y nombre de los actores que nunca han intervenido en el papel Principal de alguna película.
7. ¿Cuál de las siguientes afirmaciones es FALSA? a) b) c) d) Todo fichero debe tener al menos un índice primario.
Un fichero sólo puede tener un índice primario.
Un fichero puede tener varios índices secundarios.
Cualquier campo de un fichero puede utilizarse para crear un índice.
8. Respecto a la definición de la clave ajena de la relación PELÍCULA, indicar qué afirmación es CIERTA: a) No está bien definida porque hay que indicar el tipo de integridad referencial.
b) El tipo de integridad referencial se puede omitir porque la clave ajena está formada por un único atributo.
c) El tipo de integridad referencial se puede omitir porque el atributo de la clave ajena tiene una restricción de VNN.
d) El tipo de integridad referencial se puede omitir porque la relación sólo tiene una clave ajena.
9. Indicar cuál de las siguientes operaciones realizadas sobre la BD, provocará un error: a) En la tupla de la relación INTERVIENE con cod_peli=1 y cod_act=1, cambiar el valor del atributo papel a ‘Secundario’.
b) En la tupla de la relación INTERVIENE con cod_peli=1 y cod_act=1, cambiar el valor del atributo cod_act a 3.
c) En la tupla de la relación INTERVIENE con cod_peli=1 y cod_act=1, cambiar el valor del atributo cod_peli a 2.
d) En la tupla de la relación INTERVIENE con cod_peli=1 y cod_act=1, cambiar el valor del atributo cod_peli a 2 y el valor del atributo cod_act a 2.
10. Considera la extensión de la BD propuesta. ¿Qué ocurrirá cuando ejecutemos la siguiente transacción sobre un SGBD que garantice la atomicidad de las transacciones? /*INICIO TRANSACCIÓN*/ SET CONSTRAINT ALL DEFERRED UPDATE INTERVIENE SET cod_act = 100 WHERE cod_act = 3 UPDATE ACTOR SET cod_act= 100 WHERE cod_act = 3 COMMIT a) Si la clave ajena CAj: {cod_act} -> ACTOR de INTERVIENE estuviera definida como DEFERRABLE se modificarían 3 tuplas.
b) Si la clave ajena CAj: {cod_act} -> ACTOR de INTERVIENE estuviera definida como NOT DEFERRABLE se modificarían 3 tuplas.
c) Si la clave ajena CAj: {cod_act} -> ACTOR de INTERVIENE estuviera definida como DEFERRABLE solo se realizaría la actualización sobre ACTOR.
d) Si la clave ajena CAj: {cod_act} -> ACTOR de INTERVIENE estuviera definida como NOT DEFERRABLE la acción SET CONSTRAINT ALL DEFERRED haría que fallara toda la transacción.
11. Supóngase que se han definido todas las restricciones de integridad como DEFERRABLE INITIALLY IMMEDIATE y sea la siguiente transacción que se ejecuta sobre la base de datos BD en el SGBD Oracle: COMMIT; SET CONSTRAINT ALL IMMEDIATE; DELETE FROM ACTOR WHERE cod_act= 1; DELETE FROM INTERVIENE WHERE cod_act=1; COMMIT; a) La transacción borraría el actor de cod_act=1 y todas las intervenciones en películas de dicho actor y las películas en las que ha intervenido.
b) La transacción borraría todas las intervenciones del actor de cod_act=1.
c) La transacción borraría el actor de cod_act=1 y todas las intervenciones en películas de dicho actor.
d) La transacción borraría el actor de cod_act=1 y todas las intervenciones en películas de dicho actor sólo si el actor tiene más de una película.
12. Indica cuál de las siguientes afirmaciones es CIERTA: a) El esquema interno describe la base de datos en términos del modelo de datos que se vaya a utilizar.
b) La independencia lógica garantiza que el esquema lógico no se vea afectado por cambios en el esquema interno.
c) La independencia de datos asegura que los cambios en un esquema no afectarán a los esquemas de nivel inferior.
d) Los esquemas externos describen las distintas vistas parciales que cada usuario tiene de la base de datos.
13. ¿Qué restricción sobre el esquema de trabajo impondría la siguiente instrucción en SQL? CREATE ASSERTION r2 CHECK (NOT EXISTS (SELECT * FROM Película P WHERE NOT EXISTS (SELECT * FROM Interviene I, Actor A WHERE I.cod_act=A.cod_act AND P.cod_peli=I.cod_peli AND I.papel=’Secundario’))); a) Toda película debe tener, por lo menos, un actor que intervenga en ella y cuyo papel sea ‘Secundario’.
b) Toda película debe tener más de un actor que intervenga en ella y cuyo papel sea ‘Secundario’.
c) No puede haber una película que tenga un actor que intervenga en ella cuyo papel sea ‘Secundario’.
d) No puede haber una película que tenga un actor que intervenga en ella cuyo papel no sea ‘Secundario’.
14. Si se crea la siguiente vista: CREATE VIEW Película_basada_Libro AS SELECT * FROM Película WHERE cod_lib IS NOT NULL WITH CHECK OPTION; ¿Qué ocurrirá al realizar la siguiente instrucción? INSERT INTO Película_basada_Libro VALUES (10, ‘Aprobados’, 2011, 5, 1); a) Se inserta la tupla en la vista, la tabla Película no cambia.
b) Se inserta la tupla en la tabla Película.
c) No se puede realizar la inserción, porque se viola la definición de la vista.
d) La instrucción es inválida, porque no se pueden realizar operaciones de inserción sobre una vista creada con la clausula ‘WITH CHECK OPTION’.
SOLUCIONES CUESTIONARIO Nº Tipo A Tipo B Tipo C Tipo D Tipo E Tipo F Tipo G Tipo H 1 A D C B A D C B 2 D C B A D C B A 3 A D C B A D C B 4 A D C B A D C B 5 B A D C B A D C 6 D C B A D C B A 7 A D C B A D C B 8 B A D C B A D C 9 C B A D C B A D 10 A D C B A D C B 11 B A D C B A D C 12 D C B A D C B A 13 A D C B A D C B 14 B A D C B A D C ...