Está en la página 1de 3

1.

Una empresa de desarrollo de software quiere crear una base de datos para
almacenar la información de sus equipos de trabajo. Un programador se identifica por
su DNI, tiene un nombre, una fecha de nacimiento, una categoría y si está o no dispuesto
a hacer horas extra (dato no obligatorio). Los programadores pertenecen a un equipo (a
lo sumo a uno, pero pueden no pertenecer a ninguno de manera que si se borra un
equipo al programador se le deja vacío su equipo sin más). Estos equipos tienen un
identificador único, una denominación y una fecha de creación, todos ellos campos
obligatorios. Además, cada equipo es liderado exactamente por un programador. Cada
equipo participa a lo largo de su existencia en diversos proyectos identificados por un
código único, tienen un resumen, una fecha de inicio y una de fin de proyecto, todos
ellos campos obligatorios, excepto el último, que puede estar vacío mientras no acaba
el proyecto. Es posible que exista un proyecto en la base de datos al que aún no se le
haya asignado un equipo o cuyo equipo haya sido eliminado. De hecho, si se elimina un
equipo, los proyectos que este equipo haya realizado no deben eliminarse de la base de
datos. También es posible que haya equipos en la base de datos que aún no hayan
participado en ningún proyecto. La base de datos no permitirá eliminar un programador
que sea jefe de un equipo. Todas las actualizaciones de claves primarias se propagan.

a) Diseñe el Modelo Entidad-Relación asociado al caso anterior.


b) Derive el Modelo Relacional asociando toda la información que puede deducir
de la descripción.

PROGRAMADOR (dni: texto, nombre: texto, fecha_nac: fecha, horas_extra: boolean,


categoría: texto, miequipo: entero)
CP: dni
VNN: nombre, fecha_nac, categoría
Clave Ajena: miequipo REFERENCES Equipo(id) ON DELETE SET NULL, ON
UPDATE CASCADE
EQUIPO(id: entero, denominacion: texto, fecha_creación: fecha, jefe:texto)
CP: id
VNN: denominacion, fecha_creación, jefe
Clave Ajena: jefe REFERENCES Programador(dni) ON UPDATE CASCADE

PROYECTO(código:entero, resumen:texto, fecha_inicio: fecha, fecha_fin:fecha,


equipo: entero)
CP: código
VNN: resumen, fecha_inicio
Clave Ajena: equipo REFERENCES Equipo(código) ON DELETE SET NULL ON
UPDATE CASCADE

2. Dada la base de datos de ciclistas vista en clase:

Responda a las siguientes cuestiones en SQL:


a) Escriba la sentencia SELECT para mostrar la ciudad de salida y la de llegada de
aquellas etapas de más de 100 km y que hayan sido ganadas por el ciclista con
dorsal 7.
SELECT salida, llegada FROM Etapa
WHERE km > 100
AND dorsal = 7;
b) Escriba la sentencia SELECT para mostrar el nombre de los ciclistas que han sido
los primeros en coronar puertos con una pendiente entre el 10 y el 15%.
SELECT nombre FROM Ciclista C, Puerto P
WHERE C.dorsal=P.dorsal
AND pendiente BETWEEN 10 AND 15;

ELIJA UNA ENTRE c) y d)


c) Escriba la sentencia SELECT para mostrar la información de los ciclistas que no
han ganado ningún puerto pero sí alguna etapa de más de 200 km.
SELECT * FROM Ciclista C WHERE
NOT EXISTS (SELECT * FROM Puerto P WHERE P.dorsal = C.dorsal)
AND EXISTS
(SELECT * FROM Etapa E
WHERE C.dorsal = E.dorsal
AND km > 200);
d) Escriba la sentencia SELECT para mostrar la información de los ciclistas cuya edad
sea mayor que la media de los ciclistas de su equipo.
SELECT * FROM Ciclista C1 WHERE edad >
(SELECT AVG(edad) FROM Ciclista C2
WHERE C1.nomeq == C2.nomeq GROUP BY C2.nomeq);
e) Escriba la sentencia SELECT para mostrar el nombre del equipo y la media de
edad de los ciclistas de dichos equipos cuyo director tenga un nombre que
empiece por ‘M’, pero sólo de aquellos equipos con más de 3 ciclistas.
SELECT E.nomeq, AVG(edad)
FROM Equipo E, Ciclista C
WHERE E.nomeq = C.nomeq
AND E.director LIKE 'M%'
GROUP BY E.nomeq
HAVING COUNT(*)>3;

También podría gustarte