You are on page 1of 10

CUESTIONARIO DE BASES DE DATOS 24/06/03.

TIPO A
NOTA_OBTENIDA= (Bien_contestadas Mal_contestadas/3) 0,25.

Sea el siguiente esquema relacional, al que se har referencia como ESQUEMA de TRABAJO, que
mantiene informacin sobre la organizacin de los grupos en un curso de natacin para nios:
d2: Entero positivo
Grupo(cod_gru: d1, capacidad: d2, nivel: d3)
CP: {cod_gru} VNN: {nivel, capacidad}
Monitor(nmero: d4, nombre: d5, formacin: d6)
CP: {nmero} VNN: {nombre, formacin}
MonitorGrupo(cod_gru: d1, nmero: d4, lmite:d2)
CP: {cod_gru, nmero} VNN: {lmite}
CAj: {cod_gru} Grupo Borrado en CASCADA y Actualizacin en CASCADA
CAj: {nmero} Monitor Borrado RESTRICTIVO y Actualizacin en CASCADA
Nio(cdigo: d7, nombre: d8, edad: d9, cod_gru: d1, nmero: d4)
CP: {cdigo} VNN: {nombre, edad , cod_gru}
CAj: {cod_gru, nmero} MonitorGrupo
Integridad Referencial PARCIAL
Borrado RESTRICTIVO y Actualizacin en CASCADA

La relacin Grupo contiene todos los grupos disponibles. En la relacin Monitor se guardan los monitores
del curso. La relacin MonitorGrupo mantiene la asignacin de los monitores a los grupos. La relacin
Nio, contiene los nios apuntados al curso con la informacin de a qu grupo pertenecen y el monitor que
tienen asignado.

GRUPO MONITOR
cod_gru capacidad nivel nmero nombre formacin
G1 10 Inicial 1 Alfonso Peris Monitor-T1
G2 15 Medio 2 Mara Llopis Monitor-T2
G3 15 Alto 3 Juan Cruz Monitor-T1
4 Pedro Rius Socorrista
MONITORGRUPO NIO
cod_gru nmero lmite cdigo nombre edad cod_gru nmero
G1 1 4 1111 Juan 7 G1 -
G1 2 6 2222 Luisa 8 G1 -
G2 3 7 3333 Pedro 8 G2 -
G2 4 4 4444 Mara 8 G2 3
G3 3 7 5555 Luis 10 G3 3

1) Dado el esquema de trabajo, cul de las siguientes afirmaciones es CIERTA?


a) Un monitor slo puede encargarse de un grupo si hay algn nio asignado a dicho grupo.
b) Todo grupo debe tener al menos un monitor asignado.
c) Todo monitor necesariamente debe encargarse de un grupo.
d) Un monitor puede encargarse de un grupo, y dicho grupo puede a su vez tener varios monitores
asignados.
2) En la base de datos del esquema de trabajo, cual sera el efecto de realizar la siguiente operacin en
SQL, DELETE FROM MONITORGRUPO WHERE cod_gru=G1 and nmero=1 .
a) Se borra esa tupla.
b) No se puede borrar por la directriz Borrado Restrictivo de la clave ajena {cod_gru, nmero} de
la relacin NIO.
c) No se puede borrar por la directriz Borrado Restrictivo de la clave ajena {cod_gru} de la
relacin MONITORGRUPO.
d) Se borra esa tupla y el sistema borra tambin de la relacin NIO las tuplas con cod_gru = G1.
3) En la base de datos del esquema de trabajo, si se aade la restriccin de integridad:
CREATE ASSERTION RI
CHECK
( NOT EXISTS (SELECT * FROM Monitor Mx
WHERE NOT EXISTS (SELECT * FROM MonitorGrupo MGx
WHERE MGx.nmero=Mx.nmero)))

Cul de las siguientes transacciones es vlida, suponiendo que todas las restricciones del esquema
tienen un modo de comprobacin diferido?.
a) INSERT INTO Monitor ( nmero, nombre, formacin) VALUES (5, Pau , Monitor-T1);
COMMIT
b) INSERT INTO Monitor (nmero, nombre, formacin) VALUES (5, Pau Peris , Monitor-T1);
INSERT INTO MonitorGrupo ( cod-gru, nmero, limite) VALUES (G1, 5, 8);
COMMIT
c) INSERT INTO Monitor (nmero, nombre, formacin) VALUES (5, Pau Peris , Monitor-T1);
INSERT INTO Monitor (nmero, nombre, formacin) VALUES (6, Carmen Rius , Monitor-
T1);
INSERT INTO MonitorGrupo ( cod-gru, nmero, limite) VALUES (G1, 5, 8);
COMMIT
d) Todas las transacciones son vlidas.
4) En la base de datos del esquema de trabajo, tras ejecutar la sentencia CREATE VIEW
SOCORRISTA AS SELECT * FROM MONITOR WHERE formacin=Socorrista, cul de las
siguientes afirmaciones es CIERTA tras realizar la sentencia SQL, INSERT INTO
SOCORRISTA (nmero, nombre, formacin) VALUES (8, Pere Such , Monitor-T1);

a) La sentencia no insertar ninguna tupla puesto que no se corresponde con un monitor de


formacin Socorrista.
b) La sentencia no insertara ninguna tupla si la vista se hubiera definido con la clusula WITH
CHECK OPTION ya que no se correspondera con un monitor de formacin Socorrista.
c) La sentencia no insertara ninguna tupla si la vista se hubiera definido con la opcin NOT
DEFERRABLE ya que no se correspondera con un monitor de formacin Socorrista.
d) La sentencia no insertara ninguna tupla si la vista se hubiera definido con la opcin
DEFERRABLE ya que no se correspondera con un monitor de formacin Socorrista.
5) En la base de datos del esquema de trabajo, si se aade la restriccin de integridad:
CREATE ASSERTION R2
CHECK
( NOT EXISTS (SELECT *
FROM grupo G
WHERE capacidad <
(SELECT SUM(lmite)
FROM MonitorGrupo M
WHERE G.cod_gru = M.cod_gru ) ) )
Cul es el conjunto de operaciones que puede violar dicha restriccin de integridad?.
a) Modificar el atributo capacidad de Grupo, Insertar en MonitorGrupo, modificar el atributo lmite de
MonitorGrupo, modificar el atributo cod_gru en MonitorGrupo
b) Insertar en Grupo, Modificar el atributo capacidad de Grupo, Insertar en MonitorGrupo, modificar
el atributo lmite de MonitorGrupo.
c) Borrar en MonitorGrupo, Modificar el atributo capacidad de Grupo, Insertar en MonitorGrupo,
modificar el atributo lmite de MonitorGrupo.
d) Borrar en Nio, Modificar el atributo capacidad de Grupo, Insertar en MonitorGrupo, modificar el
atributo lmite de MonitorGrupo.

6) Cul de las siguientes afirmaciones es CIERTA:


a) Al registrarse un punto de verificacin (checkpoint) en el fichero diario se graban en disco las
actualizaciones producidas por todas las transacciones que aparecen confirmadas en el diario desde
el ltimo punto de verificacin.
b) En el fichero diario slo se registran las transacciones realizadas en la base de datos que aparecen
como confirmadas.
c) El fichero diario se recomienda que est en el mismo dispositivo fsico donde se guarda la base de
datos por razones de seguridad.
d) Los ficheros de la base de datos nunca pueden estar almacenados en discos diferentes.

7) Dado la base de datos del esquema de trabajo qu ocurrira en la base de datos si se ejecuta la
siguiente instruccin?
DELETE FROM Grupo WHERE capacidad=15 and nivel=Alto;

a) El sistema no dejara realizar la operacin.


b) La instruccin se ejecutara sin problemas.
c) La instruccin se ejecutara produciendo en cascada un borrado en MonitorGrupo.
d) La instruccin se ejecutara produciendo en cascada un borrado en la relacin MonitorGrupo y
posteriormente en la relacin Nio.
8) Dado el esquema de trabajo qu ocurrira en la base de datos si se ejecuta la siguiente instruccin?
INSERT INTO Nio ( cdigo, nombre, edad, nmero)
VALUES (6666, Juan, 12, 4);

a) La instruccin insertara una nueva fila en la relacin Nio sin problemas.


b) El sistema no dejara realizar la operacin puesto que incumplira la integridad referencial al
indicar el monitor y no el grupo.
c) La instruccin dara error ya que no inserta valor en el campo cod_gru.
d) El sistema no dejara realizar la operacin puesto que el valor del nombre del Nio ya existe en la
relacin Nio.

9) Respecto a la independencia de datos, seale la opcin FALSA:

a) La independencia de datos es la propiedad que asegura que un esquema


externo nunca se ver afectado por ningn cambio en el esquema lgico.
b) En la independencia de datos se puede distinguir la fsica y la lgica.
c) La independencia de datos desaparece cuando se produce la ligadura.
d) Cuanto ms tarde se produzca la ligadura ms independencia se tiene.
10) En la base de datos del esquema de trabajo, la cardinalidad mxima de la relacin MonitorGrupo es:
a) La cardinalidad de la relacin Monitor.
b) La cardinalidad de la relacin Grupo.
c) El producto de la cardinalidad de Monitor por la cardinalidad de Grupo.
d) Infinita.

11) Cmo se definira en el SGBD Oracle 8.0 la restriccin de integridad la edad de un nio no puede
decrecer
a) Mediante la instruccin CREATE ASSERTION del SQL estndar.
b) Mediante una restriccin de tabla (instruccin CHECK sobre el atributo edad).
c) Mediante una regla de actividad (TRIGGER).
d) No se puede definir esta restriccin en el Oracle 8.0.

12) Qu informacin devuelve la siguiente instruccin SQL?


SELECT nmero, COUNT(*) FROM Nio
GROUP BY nmero HAVING COUNT(*) >=ALL (SELECT COUNT(*)
FROM Nio
GROUP BY nmero)
a) Los monitores que tienen mayor nmero de nios asignados.
b) Los monitores que tienen mayor nmero de nios asignados en un mismo grupo
c) Los monitores que tienen mayor nmero de grupos asignados.
d) Los monitores que tienen mayor nmero de nios asignados que todava no tienen grupo.

13) Cul de estas expresiones de lgebra Relacional, responde a la consulta: qu grupos no tienen
nios apuntados?
a) Grupo[cod_gru] Nio[cod_gru]
b) Grupo[cod_gru] (Grupo Nio)[cod_gru]
c) Nio DONDE nulo(cod_gru) Grupo) [cod_gru]
d) (Grupo MonitorGrupo) [cod_gru] Nio [cod_gru]

14) En un SGBD con independencia lgica y fsica qu consecuencias tendr un cambio en el esquema
fsico relativo a la implementacin de una estructura de datos?
a) Deber cambiarse en el esquema lgico la definicin de dicha estructura.
b) Ninguna.
c) Deber cambiarse la definicin de dicha estructura de datos tanto en el esquema lgico, como en
todos los esquemas externos que la incluyen.
d) Deber volverse a compilar los programas de aplicacin que utilicen dicha estructura de datos, si
la ligadura tiene lugar en tiempo de compilacin.
BASES DE DATOS Junio 2003 Problemas

Sea el siguiente esquema relacional de una base de datos para la gestin de las misiones
espaciales a nivel mundial.

ASTRONAUTA(cod_astro:d_cod, nombre:d_nom, direccin:d_dir, telfono:d_tel,


pas:d_pas, num_viajes:d_num)
CP:{cod_astro}
VNN:{nombre, telfono}
CIENTFICO(cod_cien:d_cod, especialidad:d_esp)
CP:{cod_cien}
CAj:{cod_cien} ASTRONAUTA
NAVE(cod_nav:d_cod, nombre:d_nom, coste:d_coste)
CP:{cod_nav}
BASE(cod_base:d_cod, direccin:d_dir, pas:d_pas)
CP:{cod_base}
VNN:{pas}
VIAJE(cod_via:d_cod, cod_nav:d_cod, cod_base:d_cod, fecha_salida:d_fecha,
fecha_llegada:d_fecha, nivel_xito:d_nex)
CP:{cod_via}
VNN:{cod_nav, cod_base}
CAj:{cod_nav} NAVE
CAj:{cod_base} BASE
TRIPULANTE(cod_astro:d_cod, cod_via:d_cod)
CP:{cod_astro, cod_via}
CAj:{cod_astro} ASTRONAUTA
CAj:{cod_via } VIAJE
Adems, hay definida la siguiente
RESTRICCIN DE INTEGRIDAD:
CREATE ASSERTION
NOT EXISTS (SELECT * FROM VIAJE V
WHERE NOT EXISTS (SELECT *
FROM TRIPULANTE T,
ASTRONAUTA A, BASE B
WHERE V.cod_via = T.cod_via AND
T.cod_astro = A.cod_astro AND
V.cod_base = B.cod_base AND
B.pas = A.pas));
donde los atributos tienen el siguiente significado:

Astronauta:
cod_astro: cdigo identificador del astronauta
nombre: nombre del astronauta direccin: domicilio del astronauta
telfono: telfono de localizacin del astronauta
pas: pas de residencia del astronauta
num_viajes: nmero total de misiones realizadas por el astronauta

Cientfico:
cod_cien: cdigo identificador del cientfico
especialidad: especialidad en la que destaca el cientfico

Nave:
cod_nav: cdigo identificador de la nave
nombre: nombre de la nave coste: valor econmico de la nave

Base:
cod_base: cdigo identificador de la base de lanzamiento
direccin: localizacin de la base de lanzamiento
pas: pas en el que se encuentra ubicada la base de lanzamiento

Viaje:
cod_via: cdigo identificador del viaje.
cod_nav: cdigo identificador de la nave que va a ser lanzada
cod_base: cdigo identificador de la base de lanzamiento
fecha_salida: fecha de lanzamiento fecha_llegada: fecha de regreso
nivel_xito: valor entre 0 (misin fracasada) y 5 (misin exitosa)

Tripulante:
cod_astro: cdigo identificador del astronauta
cod_via: cdigo identificador del viaje en el que va a ser lanzado
DESPUS DE LEER ATENTAMENTE EL ESQUEMA RELACIONAL
ANTERIOR, RESUELVA LOS SIGUIENTES EJERCICIOS.

Resuelva las siguientes cuestiones sobre el esquema anterior:


a) Puede haber algn cientfico de la base de datos que no sea astronauta? Justifique
brevemente la respuesta. (0.25)
b) Segn el esquema de la base de datos (incluida la restriccin de integridad), puede
existir una base de la que no parta ningn viaje? Justifique brevemente la respuesta.
(0.25)
c) Segn el esquema de la base de datos (incluida la restriccin de integridad), puede
un viaje no tener tripulacin? Justifique brevemente la respuesta. (0.25)

Escriba en SQL/92 las siguientes consultas:


a) Obtener el nmero total de astronautas que no son cientficos. (0.5)
b) Obtener para cada nave cuntos viajes ha hecho. Incluir en el resultado el nombre de
la nave y las naves que no han hecho ningn viaje. (1)
c) Obtener el cdigo de los viajes en los que todos los astronautas son cientficos.(1)
d) Obtener el nombre de las naves que slo han partido desde una base. (1)
e) Obtener el pas desde cuyas bases ha habido ms lanzamientos. (1.25)

Se desea mantener el atributo derivado num_viajes de forma automtica, de tal forma que
siempre indique el nmero de viajes en los que ha participado el astronauta (segn la
informacin de la base de datos)
a) Enumere las operaciones sobre la base de datos que afectan al atributo derivado.(0.5)
b) Disee un disparador (trigger) de ORACLE8 para controlar alguna de las
operaciones enumeradas en la cuestin anterior. (0.5)
CUESTIONARIO DE BASES DE DATOS 24/6/2003. SOLUCIONES
Tipo Cuestionario
A B C D
1 D C B A
2 A D C B
3 B A C D
4 B A D C
5 A D C B
6 A D C B
7 A D C B
8 C B A D
9 A D C B
10 C B A D
11 C B A D
12 A D C B
13 A/B D/A C/D B/C
14 D C B A

PROBLEMAS DE BASES DE DATOS 24/6/2003. SOLUCIONES

1)
a) NO, ya que CIENTFICO tiene una clave ajena cod_cien que hace referencia a
ASTRONAUTA y dicha clave ajena tiene restriccin de valor no nulo por ser la
clave primaria de CIENTFICO.
b) S, ya que puede haber una tupla en BASE para la que no haya ninguna tupla en
VIAJE que la referencie.
c) NO, ya que la restriccin de integridad adicional obliga a que siempre haya un
miembro de la tripulacin que sea del mismo pas que la base. Esto implica
necesariamente que todo viaje tiene al menos un tripulante.

2)
a) SELECT COUNT(*)
FROM ASTRONAUTA A
WHERE A.cod_astro NOT IN (SELECT C.cod_cien FROM CIENTFICO);

b) SELECT N.nombre, COUNT(V.cod_via)


FROM NAVE N LEFT JOIN VIAJE V ON N.cod_nav = V.cod_nav
GROUP BY N.nombre, N.cod_nav;
(tambin se puede realizar con unA concatenacin normal y un UNION)
c) SELECT V.cod_via
FROM VIAJE V
WHERE NOT EXISTS (SELECT * FROM TRIPULANTE T
WHERE V.cod_via = T.cod_via AND
T.cod_astro NOT IN (SELECT cod_cien
FROM CIENTFICO));
d) SELECT N.nombre
FROM NAVE N
WHERE N.cod_nav IN (SELECT V.cod_nav FROM VIAJE V
WHERE NOT EXISTS (SELECT * FROM VIAJE V2
WHERE V2.cod_nav= N.cod_nav AND
V2.cod_base <> V.cod_base));
Tambin se podra hacer con un COUNT(DISTINCT cod_base).
e) SELECT B.pas
FROM BASE B, VIAJE V
WHERE B.cod_base = V.cod_base
GROUP BY B.pas
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM BASE B2, VIAJE V2
WHERE B2.cod_base = V2.cod_base
GROUP BY B2.pas);
(Se ignoran las fechas. Si se contemplan slo los viajes pasados, tambin estara bien).
3) a) INSERCIN en TRIPULANTE
BORRADO en TRIPULANTE
MODIFICACIN de cod_astro en TRIPULANTE
Adems:
La modificacin directa del atributo num_viajes de ASTRONAUTA debera
limitarse a los triggers.
La insercin de un nuevo astronauta podra controlarse de modo que siempre se
empiece con num_viajes = 0.
b) CREATE TRIGGER T1
AFTER INSERT ON TRIPULANTE
FOR EACH ROW
BEGIN
UPDATE ASTRONAUTA A
SET A.num_viajes = A.num_viajes + 1
WHERE A.cod_astro = :new.cod_astro;
END;
Esta solucin se ha realizado ignorando el hecho de si el viaje se ha producido o es un
viaje futuro. En el caso de que se tenga en cuenta las fechas, el resultado es ms completo
y tambin est bien.