SlideShare una empresa de Scribd logo
Curso 2001/2002
Ejercicios de Diseño de Bases de Datos Relacionales
Para cada ejercicio se presenta la solución final que se obtiene tras el diseño lógico, es decir, el conjunto
de relaciones en tercera forma normal que forman el esquema lógico de la base de datos, las claves ajenas y
sus reglas.
EJERCICIO 1
CLIENTE(dnicli,nombre,dirección)
Esta tabla almacena los datos personales de los clientes.
PROCURADOR(dniproc,nombre,dirección)
Esta tabla almacena los datos personales de los procuradores.
ASUNTO(numexp,dnicli,fechaini,fechafin,estado)
ASUNTO.dnicli es clave ajena a CLIENTE (cliente al que pertenece el asunto)
Esta tabla almacena los datos de los asuntos y el cliente al que pertenecen.
ASUNTO_PROC(numexp,dniproc)
ASUNTO_PROC.numexp es clave ajena a ASUNTO (asunto que es llevado por algún
procurador)
ASUNTO_PROC.dniproc es clave ajena a PROCURADOR (procurador que lleva el asunto)
En esta tabla se especifica qué procuradores llevan cada asunto y los asuntos que lleva cada
procurador.
Nulos Borrado Modificación
ASUNTO.dnicli No (1) Restringir (2) Propagar
ASUNTO_PROC.numexp No Propagar (3) Propagar
ASUNTO_PROC.dniproc No Restringir (4) Propagar
Veamos la interpretación de algunas de las reglas que acabamos de especificar para las claves ajenas,
una vez consultadas con los propietarios de la información:
(1) Todo asunto debe pertenecer a un cliente conocido.
(2) No se puede eliminar un cliente si éste tiene algún asunto.
(3) Si se elimina un asunto, ya no se mantiene la información respecto a los procuradores que lo
llevaban.
(4) No se puede eliminar un procurador si éste lleva o ha llevado algún asunto.
EJERCICIO 2
ZOO(nombre,ciudad,país,tamaño,presupuesto)
Esta tabla almacena los datos de los zoos.
ESPECIE(nomcientífico,nomvulgar,familia,peligro)
Esta tabla almacena los datos que caracterizan las especies animales.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
2
ANIMAL(numid,nomzoo,nomespecie,sexo,añonacim,país,continente)
ANIMAL.nomzoo es clave ajena a ZOO (zoo en el que se encuentra el animal)
ANIMAL.nomespecie es clave ajena a ESPECIE (especie a la que pertenece el animal)
Esta tabla almacena los datos de los animales, la especie a la que pertenece cada uno y el zoo
en el que se encuentran.
Nulos Borrado Modificación
ANIMAL.nomzoo No (1) Restringir (2) Propagar
ANIMAL.nomespecie No (1) Restringir (3) Propagar
Veamos la interpretación de algunas de las reglas que acabamos de especificar para las claves ajenas,
después de haberlas consultado con los propietarios de la información:
(1) Todo animal se encuentra en un zoo conocido y pertenece a una especie conocida.
(2) No se puede eliminar un zoo que tiene animales. Se podría dar la opción de cambiar todos sus
animales a otros zoos, y una vez repartidos todos, ya se puede eliminar el zoo que ha quedado
vacío.
(3) No se puede eliminar una especie si hay animales en los zoos que pertenecen a la misma.
EJERCICIO 3
PERSONA(dni,nombre,dirección)
En esta tabla se guardan los datos de las personas de interés.
SOCIO(dnisocio)
SOCIO.dnisocio es clave ajena a PERSONA (algunas personas son socios)
En esta tabla se especifica qué personas de interés son socios del club.
PATRON(dnipatrón)
PATRON.dnipatrón es clave ajena a PERSONA (algunas personas son patrones)
En esta tabla se especifica qué personas de interés son patrones.
Nótese que una persona puede ser socio y patrón a la vez.
BARCO(matrícula,dnisocio,nombre,amarre,cuota)
BARCO.dnisocio es clave ajena a SOCIO (socio propietario del barco)
Esta tabla almacena los datos de los barcos y el socio al que pertenece cada uno.
SALIDA(matrícula,fecha,hora,destino,dnipatrón)
SALIDA.matrícula es clave ajena a BARCO (barco en que se realiza la salida)
SALIDA.dnipatrón es clave ajena a PATRON (patrón que lleva el barco en la salida)
En esta tabla se almacena información sobre las salidas realizadas por cada barco y el patrón
que lo lleva en cada ocasión.
Tras consultar con los propietarios de la información, sabemos lo siguiente:
Si se elimina una persona, ya no interesa saber si es socio y/o patrón.
Si se elimina un socio, se eliminan también sus barcos y las salidas que éstos han realizado.
No se puede eliminar un patrón si éste ha realizado alguna salida.
Por lo tanto, las reglas de comportamiento de las claves ajenas serán:
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
3
Nulos Borrado Modificación
SOCIO.dnisocio No Propagar Propagar
PATRON.dnipatrón No Propagar Propagar
BARCO.dnisocio No Propagar Propagar
SALIDA.matrícula No Propagar Propagar
SALIDA.dnipatrón No Restringir Propagar
Por motivos de eficiencia puede ser necesario cambiar el esquema, eliminando las tablas SOCIO y
PATRON, quedando de este modo:
PERSONA(dni,nombre,dirección,socio,patrón)
PERSONA.socio ∈ {'sí','no'}
PERSONA.patrón ∈ {'sí','no'}
BARCO(matrícula,dnisocio,nombre,amarre,cuota)
BARCO.dnisocio es clave ajena a PERSONA (Restricción: la persona propietaria del barco tiene
que ser necesariamente un socio)
SALIDA(matrícula,fecha,hora,destino,dnipatrón)
SALIDA.matrícula es clave ajena a BARCO (barco en que se realiza la salida)
SALIDA.dnipatrón es clave ajena a PERSONA (Restricción: la persona que lleva el barco tiene
que ser necesariamente un patrón)
Las dos nuevas restricciones que aparecen son reglas de integridad que se deben mantener en todos los
estados de la base de datos. Cuando hacemos cambios en el esquema de la base de datos para conseguir
una mayor eficiencia, solemos introducir nuevas reglas de integridad que se deberán respetar en todo
momento.
EJERCICIO 4
SOCIO(codsocio,nombre,dirección,teléfono)
En esta tabla se almacenan los datos personales de los socios.
DIRECTOR(nomdirector)
En esta tabla se guardan nombres de directores de películas. Cualquier dato adicional que se
desee saber de los directores, se colocará en esta tabla añadiendo nuevas columnas. El
esquema de la base de datos es así flexible ya que acepta la introducción de nueva información
en el esquema sin introducir por ello redundancias de datos.
ACTOR(nomactor)
En esta tabla se guardan nombres de actores de películas. Cualquier dato adicional sobre los
actores se podrá añadir a esta tabla mediante nuevas columnas. El esquema sigue siendo
flexible.
GENERO(nomgénero)
En esta tabla se guardan nombres de géneros de películas.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
4
PELICULA(título,nomdirector,nomgénero)
PELICULA.nomdirector es clave ajena a DIRECTOR (director de la película)
PELICULA.nomgénero es clave ajena a GENERO (género al que pertenece la película)
En esta tabla se almacena el título de las películas que hay en el vídeo club, el director y el
género de la película.
CINTA(numcinta,título,nomdirector)
(CINTA.título,CINTA.nomdirector) es clave ajena a PELICULA (película que hay grabada en la
cinta)
En esta tabla se guarda información sobre las cintas que posee el vídeo club. Cada cinta tiene
grabada una sola película.
PRESTAMO(numcinta,fecha,codsocio)
PRESTAMO.numcinta es clave ajena a CINTA (cinta que está actualmente prestada)
PRESTAMO.codsocio es clave ajena a SOCIO (socio que tiene prestada la cinta)
Cuando se presta una cinta a un socio, se registra en esta tabla.
DEVUELTA(numcinta,fecha,codsocio)
Se supone que la fecha contiene información también sobre la hora en que se realiza el
préstamo.
DEVUELTA.numcinta es clave ajena a CINTA (cinta que fue prestada y ya ha sido devuelta)
DEVUELTA.codsocio es clave ajena a SOCIO (socio que tomó prestada la cinta y ya la ha
devuelto)
Cuando un socio devuelve una cinta que tenía prestada, la tupla correspondiente a dicho
préstamo se copia en esta tabla y se borra de PRESTAMO.
LISTA_ESPERA(codsocio,título,nomdirector,fecha,hora)
LISTA_ESPERA.codsocio es clave ajena a SOCIO (socio que está esperando ver una película)
(LISTA_ESPERA.título,LISTA_ESPERA.nomdirector) es clave ajena a PELICULA (película que
tiene socios en lista de espera)
Los atributos fecha,hora se han añadido para mantener el orden en la lista de espera.
En esta tabla se especifica la lista de espera de socios para cada película. Un mismo socio
puede estar en la lista de espera de varias películas a la vez. Cuando el socio consigue la
película, se elimina de la lista.
REPARTO(título,nomdirector,nomactor)
(REPARTO.título,REPARTO.nomdirector) es clave ajena a PELICULA (película que de la que
conocemos el reparto de actores)
REPARTO.actor es clave ajena a ACTOR (actor que aparece en el reparto de la película)
En esta tabla se almacena información sobre las películas en las que ha intervenido cada actor.
Un mismo actor puede haber participado en varias películas.
GUSTA_DIRECTOR(codsocio,nomdirector)
GUSTA_DIRECTOR.codsocio es clave ajena a SOCIO (socio al que le gustan directores)
GUSTA_DIRECTOR.nomdirector es clave ajena a DIRECTOR (director que le gusta al socio)
En esta tabla se almacenan los gustos, en cuanto a directores, de cada socio (a cada socio le
pueden gustar varios directores).
GUSTA_ACTOR(codsocio,nomactor)
GUSTA_ACTOR.codsocio es clave ajena a SOCIO (socio al que le gustan actores)
GUSTA_ACTOR.nomactor es clave ajena a ACTOR (actor que le gusta al socio)
En esta tabla se almacenan los gustos, en cuanto a actores, de cada socio (a cada socio le
pueden gustar varios actores).
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
5
GUSTA_GENERO(codsocio,nomgénero)
GUSTA_GENERO.codsocio es clave ajena a SOCIO (socio al que le gustan géneros de
películas)
GUSTA_GENERO.nomgénero es clave ajena a GENERO (género que le gusta al socio)
En esta tabla se almacenan los gustos, en cuanto a géneros, de cada socio (a cada socio le
pueden gustar varios géneros).
Tras consultar con los propietarios de la información, se han establecido las siguientes reglas para las
claves ajenas:
Nulos Borrado Modific.
PRESTAMO.codsocio No Restringir (1) Propagar
DEVUELTA.codsocio No Restringir (1) Propagar
LISTA_ESPERA.codsocio No Propagar (1) Propagar
GUSTA_DIRECTOR.codsocio No Propagar (1) Propagar
GUSTA_ACTOR.codsocio No Propagar (1) Propagar
GUSTA_GENERO.codsocio No Propagar (1) Propagar
(CINTA.título,CINTA.nomdirector) No Propagar (2) Propagar
(LISTA_ESPERA.título,LISTA_ESPERA.nomdirector) No Restringir (2) Propagar
(REPARTO.título,REPARTO.nomdirector) No Propagar (2) Propagar
PRESTAMO.numcinta No Restringir (3) Propagar
DEVUELTA.numcinta No Restringir (3) Propagar
PELICULA.nomdirector No Restringir (4) Propagar
GUSTA_DIRECTOR.nomdirector No Restringir (4) Propagar
REPARTO.nomactor No Restringir (5) Propagar
GUSTA_ACTOR.nomactor No Restringir (5) Propagar
PELICULA.nomgénero No Restringir (6) Propagar
GUSTA_GENERO.nomgénero No Restringir (6) Propagar
(1) Si se elimina un socio, ya no se quiere conocer sus gustos en cuanto a directores, actores y
géneros. Además, se elimina de las listas de espera en las que se encontraba. No se puede
eliminar un socio que ha tomado prestada alguna película en alguna ocasión.
(2) Si se elimina una película, se eliminan todas sus copias y la información sobre su reparto de
actores. No se puede eliminar una película que tiene socios en lista de espera.
(3) No se puede eliminar una cinta que ha sido prestada alguna vez.
(4) No se pueden eliminar directores que han dirigido alguna película o que le gustan a algún socio.
(5) No se pueden eliminar actores que aparecen en el reparto de alguna película o que le gustan a
algún socio.
(6) No se puede eliminar un género si hay películas del mismo o si es un género que le gusta a
algún socio.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
6
Por motivos de eficiencia puede ser necesario cambiar el diseño, uniendo las tablas PRESTAMO y
DEVUELTA, quedando de este modo:
PRESTAMO(numcinta,fecha,codsocio,pres_dev)
El nuevo atributo pres_dev tomará el valor 'prestada' si la cinta está prestada actualmente, y tomará el
valor 'devuelta' si la cinta ya ha sido devuelta y el préstamo ha finalizado. Antes, la tabla PRESTAMO tenía
como clave primaria numcinta, con lo que no era posible que una misma cinta apareciese como prestada a
dos socios a la vez. Ahora, al unir los préstamos actuales y los finalizados, la clave primaria es
(numcinta,fecha) y se debe añadir una regla de integridad que se encargue de respetar que cada cinta puede
estar prestada (actualmente) a un único socio.
EJERCICIO 5
BASE(codbase)
En esta tabla se almacenan los códigos de las bases donde regresan pilotos y miembros de la
tripulación y donde se realizan las revisiones de mantenimiento a los aviones.
AVION(codavión,tipo,codbase)
AVION.codbase es clave ajena a BASE
Esta tabla almacena los datos de los aviones y la base en la que se les hace el mantenimiento.
PILOTO(codpiloto,nombre,horas,codbase)
PILOTO.codbase es clave ajena a BASE
Esta tabla almacena los datos de los pilotos y la base a la que regresan al final de la jornada.
MIEMBRO(codmiembro,nombre,codbase)
MIEMBRO.codbase es clave ajena a BASE
Esta tabla almacena los datos de los miembros de tripulación y la base a la que regresan al final
de la jornada.
VUELO(numvuelo,origen,destino,hora)
En esta tabla se almacena la información de los vuelos que se realizan diariamente.
VIAJE(numvuelo,fecha,codavión,codpiloto)
VIAJE.numvuelo es clave ajena a VUELO
VIAJE.codavión es clave ajena a AVION
VIAJE.codpiloto es clave ajena a PILOTO
En esta tabla se almacena la información de cada viaje: vuelo que realiza, avión y piloto.
TRIPULACION(numvuelo,fecha,codmiembro)
(TRIPULACION.numvuelo,TRIPULACION.fecha) es clave ajena a VIAJE
TRIPULACION.codmiembro es clave ajena a MIEMBRO
En esta tabla se especifica qué miembros de tripulación han ido en cada viaje.
Las siguientes especificaciones nos ayudarán a establecer las reglas de comportamiento de las claves
ajenas.
No se puede eliminar una base en la que se realiza el mantenimiento a algún avión o a la que
regresan pilotos o miembros tras los vuelos de una jornada.
Si se elimina un vuelo, se eliminan todos los viajes realizados en ese vuelo y los que se han
planificado.
Si se elimina un avión, en los viajes que ha realizado o tiene planificados, se pone la referencia al
avión a nulo. Aquellos viajes que están por realizar deberán ser asignados a otros aviones.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
7
Si se elimina un piloto, en los viajes que ha realizado o tiene planificados, se pone la referencia al
piloto a nulo. Aquellos viajes que están por realizar deberán ser asignados a otros pilotos.
Si se elimina un viaje, ya no se quiere conocer los miembros de la tripulación asignados al mismo.
Nulos Borrado Modificación
AVION.codbase No Restringir Propagar
PILOTO.codbase No Restringir Propagar
MIEMBRO.codbase No Restringir Propagar
VIAJE.numvuelo No Propagar Propagar
VIAJE.codavión Sí Anular Propagar
VIAJE.codpiloto Sí Anular Propagar
(TRIPULACION.numvuelo,TRIPULACION.fecha) No Propagar Propagar
TRIPULACION.codmiembro No Propagar Propagar
EJERCICIO 6
TITULACION(nomtitu)
Esta tabla almacena los nombres de las titulaciones de la universidad.
DEPARTAMENTO(nomdepto)
Esta tabla almacena los nombres de los departamentos de la universidad.
AREA(nomárea,nomdepto)
AREA.nomdepto es clave ajena a DEPARTAMENTO
Esta tabla almacena los nombres de las áreas que forman cada departamento de la universidad.
Cada área pertence a un solo departamento.
ASIGNATURA(codasig,nombre,tipo,curso,libconf,limadm,credteo,credlab,
grteo,grlab,nomtitu,nomárea)
ASIGNATURA.nomárea es clave ajena a AREA
ASIGNATURA.nomtitu s clave ajena a TITULACION
Esta tabla almacena los datos de las asignaturas que pertencen a cada una de las titulaciones
de la universidad y el área a la que están adscritas.
INCOMPATIBLE(codasig,codincomp)
INCOMPATIBLE.codasig es clave ajena a ASIGNATURA
INCOMPATIBLE.codincomp es clave ajena a ASIGNATURA
Las asignaturas que aparecen en INCOMPATIBLE.codasig tienen incompatibilidades: es
necesario superar otras asignaturas para poderlas aprobar.
Las asignaturas que aparecen en INCOMPATIBLE.codincomp son requisitos de otras
asignaturas: es necesario superarlas para poder aprobar esas otras asignaturas.
Por ejemplo, buscando las filas donde codasig='F38' encontramos en codincomp las asignaturas
que hay que superar para poder aprobar la F38. Buscando las filas donde codincomp='F11'
encontramos en codasig las asignaturas que no se pueden aprobar si no se ha superado la F11.
En esta tabla se especifican las incompatibilidades entre asignaturas.
EQUIVALENTE(codasig,codequiv)
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
8
EQUIVALENTE.codasig es clave ajena a ASIGNATURA
EQUIVALENTE.codequiv es clave ajena a ASIGNATURA
En esta tabla se especifican las equivalencias entre asignaturas.
LIBCONF(codasig,nomtitu)
LIBCONF.codasig es clave ajena a ASIGNATURA
LIBCONF.nomtitu es clave ajena a TITULACION
En esta tabla se especifica qué asignaturas se ofertan como libre configuración para cada
titulación.
PROFESOR(nomprof,despacho,nomarea)
PROFESOR.nomárea es clave ajena a AREA
Esta tabla almacena los datos de los profesores de la universidad y el área a la que pertence
cada uno.
CONSULTAS(nomprof,día,horas)
CONSULTAS.nomprof es clave ajena a PROFESOR
En esta tabla se almacena el horario de consultas de cada profesor. Un profesor puede tener su
horario repartido en varios días y en un mismo día, puede tener varias franjas horarias
diferentes.
DOCENCIA(nomprof,codasig)
DOCENCIA.nomprof es clave ajena a PROFESOR
DOCENCIA.codasig es clave ajena a ASIGNATURA
En esta tabla se especifica de qué asignaturas imparte clase cada profesor. Una misma
asignatura puede ser impartida por varios profesores.
Hay que añadir una regla de integridad: todos los profesores que imparten clase de una misma
asignatura deben pertenecer al área a la que pertenece la asignatura. El hecho de conservar una relación que
en principio es redundante nos facilita el control de la integridad.
Nulos Borrado Modificación
AREA.nomdepto No Propagar Propagar
ASIGNATURA.nomárea Sí Restringir Propagar
PROFESOR.nomárea No Restringir Propagar
ASIGNATURA.nomtitu Sí Propagar Propagar
LIBCONF.nomtitu No Propagar Propagar
INCOMPATIBLE.codasig No Propagar Propagar
INCOMPATIBLE.codincomp No Restringir Propagar
EQUIVALENTE.codasig No Propagar Propagar
EQUIVALENTE.codequiv No Propagar Propagar
LIBCONF.codasig No Propagar Propagar
DOCENCIA.codasig No Propagar Propagar
CONSULTAS.nomprof No Propagar Propagar
DOCENCIA.nomprof No Restringir Propagar
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
9
No se permite eliminar un área que tiene asignaturas asignadas o que tiene profesores. No se permite
eliminar una asignatura que es requisito de otra. No se permite eliminar un profesor que tiene docencia
asignada.
EJERCICIO 7
CINE(nomcine,calle,número,teléfono)
En esta tabla se almacenan los datos de los cines.
TARIFA(nomcine,día,precio)
TARIFA.nomcine es clave ajena a CINE
TARIFA.día ∈ {‘espectador’,’jubilado’,’festivo’,’normal’}
En esta tabla se especifica la tarifa de precios de cada cine según el día.
PELICULA(título,clasificación,director,género,actor1,actor2,actor3)
PELICULA.clasificación ∈ {‘tolerada_menores’,’no_recomendada_menores_13’}
PELICULA.género ∈ {‘dibujos’,’comedia’,’drama’’}
En esta tabla se almacena información sobre las películas que se proyectan.
PASES(nomcine,título,hora)
PASES.nomcine es clave ajena a CINE
PASES.título es clave ajena a PELICULA
En esta tabla se especifican las películas que se están pasando en cada cine y el horario de los
pases de cada una.
Nulos Borrado Modificación
TARIFA.nomcine No Propagar Propagar
PASES.nomcine No Propagar Propagar
PASES.título No Restringir Propagar
EJERCICIO 8
ARTICULO(título,localización,email)
PALABRA_CLAVE(título,palabra)
PALABRA_CLAVE.título es clave ajena a ARTICULO
INFORME_TECNICO(título,centro,número,mes,año)
INFORME_TECNICO.título es clave ajena a ARTICULO
CONGRESO(congreso,tipo,frecuencia,añoinicio)
EDICION_CONGRESO.congreso es clave ajena a CONGRESO
EDICION_CONGRESO(congreso,edición,fechainicio,fechafin,ciudad,país)
ARTICULO_ACTA(título,congreso,edición)
ARTICULO_ACTA.título es clave ajena a ARTICULO
(ARTICULO_ACTA.congreso,ARTICULO_ACTA.edición) es clave ajena a
EDICION_CONGRESO
REVISTA_CIENTIFICA(revista,editor,añoinicio,frecuencia)
TEMA_REVISTA(revista,tema)
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
10
TEMA_REVISTA.revista es clave ajena a REVISTA_CIENTIFICA
NUMERO_REVISTA.revista es clave ajena a REVISTA_CIENTIFICA
NUMERO_REVISTA(revista,número,año)
ARTICULO_REVISTA(título,revista,número,primpágina,ultpágina)
ARTICULO_REVISTA.título es clave ajena a ARTICULO
(ARTICULO_REVISTA.revista,ARTICULO_REVISTA.número) es clave ajena a
NUMERO_REVISTA
INVESTIGADOR(nombre,centro,email)
TEMA_INVESTIGADOR(nombre,tema)
TEMA_INVESTIGADOR.nombre es clave ajena a INVESTIGADOR
AUTOR(título,nombre)
AUTOR.título es clave ajena a ARTICULO
AUTOR.nombre es clave ajena a INVESTIGADOR
Nulos Borrado Modificación
PALABRA_CLAVE.título No Propagar Propagar
INFORME_TECNICO.título No Propagar Propagar
ARTICULO_ACTA.título No Propagar Propagar
ARTICULO_REVISTA.título No Propagar Propagar
AUTOR.título No Propagar Propagar
EDICION_CONGRESO.congreso No Propagar Propagar
(ARTICULO_ACTA.congreso,
ARTICULO_ACTA.edición) No Restringir Propagar
TEMA_REVISTA.revista No Propagar Propagar
NUMERO_REVISTA.revista No Propagar Propagar
(ARTICULO_REVISTA.revista,
ARTICULO_REVISTA.número) No Restringir Propagar
TEMA_INVESTIGADOR.nombre No Propagar Propagar
AUTOR.nombre No Restringir Propagar
EJERCICIO 9
ORGANISMO(nombre,dirección,población,cp,teléfono)
CONVOCATORIA(número,programa,fecha,fechalim,web,boedogv,fecharesol,organismo)
CONVOCATORIA.organismo es clave ajena a ORGANISMO (No / Rest. / Prop.)
SOLICITUD(título,fechapresent,fechaini,fechafin,importe,numreg,numconv,progconv,aprob,invp
pal)
(SOLICITUD.numconv,SOLICITUD.progconv) es clave ajena a
CONVOCATORIA (No / Rest. / Prop.)
SOLICITUD.invppal es clave ajena a INVESTIGADOR (No / Rest. / Prop.)
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
11
INVESTIGADOR(nombre,grupo,área)
INVESTIGADOR.grupo es clave ajena a GRUPO (Sí / Rest. / Prop.)
INVESTIGADOR.área es clave ajena a AREA (No / Rest. / Prop.)
PARTICIPACION(solicitud,investigador,horas)
PARTICIPACION.solicitud es clave ajena a SOLICITUD (No / Prop. / Prop.)
PARTICIPACION.investigador es clave ajena a INVESTIGADOR (No / Prop. / Prop.)
GRUPO(nombre,invresp)
GRUPO.invresp es clave ajena a INVESTIGADOR (No / Rest. / Prop.)
DEPARTAMENTO(nombre,director)
DEPARTAMENTO.director es clave ajena a INVESTIGADOR (Sí / Rest. / Prop.)
AREA(nombre,depto)
AREA.depto es clave ajena a DEPARTAMENTO (No / Prop. / Prop.)
EJERCICIO 10
MODELO(marca,modelo,precio,dto,potencia,cilindrada)
AUTOMOVIL(bastidor,marca,modelo)
(AUTOMOVIL.marca,AUTOMOVIL.modelo) es clave ajena a MODELO (No / Rest. / Prop.)
STOCK(bastidor,servoficial)
STOCK.bastidor es clave ajena a AUTOMOVIL (No / Prop. / Prop.)
STOCK.servoficial es clave ajena a VENDEDOR (Sí / Anular / Prop.)
VENDIDO(bastidor,matrícula,precio,fechaentrega,modopago,stock,nifvendedor)
VENDIDO.bastidor es clave ajena a AUTOMOVIL (No / Rest. / Prop.)
VENDIDO.nifvendedor es clave ajena a VENDEDOR (No / Rest. / Prop.)
VENDEDOR(nif,nombre,dirección,tipo)
EQUIP_SERIE(marca,modelo,carac)
(EQUIP_SERIE.marca,EQUIP_SERIE.modelo) es clave ajena a MODELO (No / Pr. / Pr.)
EQUIP_EXTRA(marca,modelo,carac,precio)
(EQUIP_EXTRA.marca,EQUIP_EXTRA.modelo) es clave ajena a MODELO (No / Pr. / Pr.)
EQUIP_VENDIDO(bastidor,carac,precio)
EQUIP_VENDIDO.bastidor es clave ajena a VENDIDO (No / Prop. / Prop.)
Los atributos EQUIP_SERIE.carac, EQUIP_EXTRA.carac y EQUIP_VENDIDO.carac están definidos
sobre el mismo dominio.
EJERCICIO 11
PERSONA(numss,nif,nombre,dirección,teléfono,población,provincia,codpostal)
En esta tabla aparecen los datos comunes a todas las personas, sean médicos, otros empleados
o pacientes. De este modo, si por ejemplo un empleado es también paciente del centro de salud,
se evita la repetición de sus datos.
Los atributos población y provincia admiten nulos ya que no se aplican a los pacientes.
MEDICO(numss,numcol,tipo)
tipo ∈ {'titular', 'interino', 'sustituto'}
MEDICO.numss es clave ajena a PERSONA (No / Prop. / Prop.)
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
12
HORARIO(numss,día,horario)
HORARIO.numss es clave ajena a MEDICO (No / Prop. / Prop.)
SUSTITUCION(numss,fechalta,fechabaja)
SUSTITUCION.numss es clave ajena a MEDICO (No / Prop. / Prop.)
Hay que tener en cuenta que sólo los médicos sustitutos hacen sustituciones.
EMPLEADO(numss,tipo)
tipo ∈ {'ATS', 'ATS de zona', 'auxiliar enfermería', 'celador', 'administrativo'}
EMPLEADO.numss es clave ajena a PERSONA (No / Prop. / Prop.)
VACACIONESMED(numss,fechaini,fechafin)
VACACIONESMED.numss es clave ajena a MEDICO (No / Prop. / Prop.)
VACACIONESEMP(numss,fechaini,fechafin)
VACACIONESEMP.numss es clave ajena a EMPLEADO (No / Prop. / Prop.)
PACIENTE(numss,numssmédico)
PACIENTE.numss es clave ajena a PERSONA (No / Prop. / Prop.)
PACIENTE.numssmédico es clave ajena a MEDICO (No / Rest. / Prop.)
EJERCICIO 12
EMPRESA(nif,nombre,dirección,director)
CADENA(nomcadena,director,nifemisorasede,nifempresa)
CADENA.nifempresa es clave ajena a EMPRESA (No / Prop. / Prop.)
CADENA.nifemisorasede es clave ajena a EMISORA (No / Rest. / Prop.)
EMISORA(cif,nombre,dirección,director,banda,provincia,nomcadena)
EMISORA.nomcadena es clave ajena a CADENA (No / Prop. / Prop.)
PROGRAMA(nomprog,responsable,precio/seg)
PROG_LOCAL(nomprog,nifemisora)
PROG_LOCAL.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.)
PROG_LOCAL.nifemisora es clave ajena a EMISORA (No / Prop. / Prop.)
PROG_CADENA(nomprog,nomcadena)
PROG_CADENA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.)
PROG_CADENA.nomcadena es clave ajena a CADENA (No / Prop. / Prop.)
FRANJA(nomprog,horainicio,día,duración)
FRANJA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.)
PATROCINADOR(contrato,nombre,duración,importe)
PATROCINA(contrato,nomprog,segundos)
PATROCINA.contrato es clave ajena a PATROCINADOR (No / Rest. / Prop.)
PATROCINA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.)
EJERCICIO 13
NIÑO(numatri,nombre,fechanac,fechaingreso,fechabaja,dnipaga)
NIÑO.dnipaga es clave ajena a PERSONA (No / Rest. / Prop.)
La persona a la que se hace referencia debe tener anotada una cuenta corriente.
El atributo fechabaja debe aceptar nulos.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
13
PERSONA(dni,nombre,dirección,telf1,telf2,ctacorriente)
Aquí están las personas autorizadas a recoger niños y las personas que pagan por la asistencia
de los niños a la guardería, por lo tanto telf2 y ctacorriente aceptarán nulos. Si una persona paga
por algún niño, es obligatorio que tenga un número de cuenta corriente.
RECOGE(dni,numatri,relación)
RECOGE.dni es clave ajena a PERSONA (No / Prop. / Prop.)
RECOGE.numatri es clave ajena a NIÑO (No / Prop. / Prop.)
Se ha escogido como clave primaria la combinación de los dos atributos porque una persona
puede recoger a varios niños y cada niño puede ser recogido por varias personas.
PLATO(nomplato,numenú)
En esta tabla se especifican los platos que componen cada menú. Se ha considerado que un
mismo plato puede formar parte de varios menús.
INGREDIENTE(nomingred,nomplato)
Los atributos PLATO.nomplato e INGREDIENTE.nomplato están definidos sobre el mismo
dominio. Además, los nombres de los platos en INGREDIENTE.nomplato deben aparecer como
valores en PLATO.nomplato
En esta tabla se especifican los ingredientes que componen cada plato. Un mismo ingrediente
puede aparecer en varios platos.
ALERGIA(numatri,nomingred)
Los atributos INGREDIENTE.nomingred y ALERGIA.nomingred están definidos sobre el mismo
dominio.
En esta tabla se especifican las alergias de cada niño, teniendo en cuenta que un niño puede
tener alergia a varios ingredientes.
COMIDA(numatri,fecha,numenú)
COMIDA.numatri es clave ajena a NIÑO (No / Prop. / Prop.)
En esta tabla se especifican las comidas realizadas por cada niño y cada día. Se ha supuesto
que en una misma fecha distintos niños pueden tomar distintos menús (a causa de las alergias o
por enfermedad).
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
14
EJERCICIO 14
nombre
CONVOCATORIA
ORGANISMO
SOLICITUD
GRUPO_INVESTDEPARTAMENTO
promueve
tiene
realiza
pertenece
(1,n)(1,1)
(0,n) (1,1)
(1,1)
(0,n)
(1,1)(1,n)
nombre
dirección
población
cp teléfono
importe
f_presenttítulo aprob
f_ini
f_fin
num_reg
fecha
programa
número
f_lim
WEB
BOE/DOGV
f_resol
nombre
(0,1)
pertenece un_gestión
(1,n)
(1,1)
nombre
(0,1) (1,1)
(1,1)(0,n)
tiene
aprob. DE_SOLIC
CON_EMP
CONTRATO(t,e)
IVA código
importe
trabajo
f_ini
f_fin
(1,1)
(1,n)
EMPRESA
NIF
tipo
sector
dir
telf
CP
pob
pers_resp
perten
UNIDAD_GESTION(nombre)
DEPARTAMENTO(nombre,unidad)
DEPARTAMENTO.unidad es clave ajena a UNIDAD_GESTION (No / Rest. / Prop.)
EMPRESA(nif,dirección,teléfono,codpostal,población,tipo,sector)
CONTRATO(código,iva)
CONTRATO_SOLICITUD(código,solicitud)
CONTRATO_SOLICITUD.código es clave ajena a CONTRATO (No / Prop. / Prop.)
CONTRATO_EMPRESA.solicitud es clave ajena a SOLICITUD (No / Rest. / Prop.)
CONTRATO_EMPRESA(código,importe,trabajo,fechaini,fechafin,grupo,empresa)
CONTRATO_EMPRESA.código es clave ajena a CONTRATO (No / Prop. / Prop.)
CONTRATO_EMPRESA.grupo es clave ajena a GRUPO (No / Rest. / Prop.)
CONTRATO_EMPRESA.empresa es clave ajena a EMPRESA (No / Rest. / Prop.)
EJERCICIO 15
PROPIETARIO(nomprop,teléfono)
CLIENTE(nomcli)
INMUEBLE(ref,nomprop,m2,dirección,alquiler,venta,oficina,tipo,zona)
INMUEBLE.nomprop es clave ajena a PROPIETARIO (No / Rest. / Prop.)
INMUEBLE.alquiler y INMUEBLE.venta son los precios de alquiler y venta; si alguno es nulo, es
que el inmueble no se oferta de ese modo.
INMUEBLE.oficina es nulo si no se tiene las llaves del inmueble
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
15
INMUEBLE.tipo ∈ {'piso ocasión', 'piso nuevo', 'casa', 'villa', 'local'}
INMUEBLE.zona es nulo si tipo='villa'
VISITAS(ref,fecha,nomcli,comentario)
VISITAS.ref es clave ajena a INMUEBLE (No / Prop. / Prop.)
VISITAS.fecha almacena fecha y hora
VISITAS.nomcli es clave ajena a CLIENTE (No / Prop. / Prop.)
ESTANCIA(tipoestancia)
VIVIENDA(ref,tipoestancia,cantidad)
VIVENDA.ref es clave ajena a INMUEBLE; en la tupla referenciada debe cumplirse que
tipo ∈ {'piso ocasión', 'piso nuevo', 'casa', 'villa'}
VIVENDA.tipoestancia es clave ajena a ESTANCIA (No / Rest. / Prop.)
CARACTERISTICA(ref,característica)
CARACTERISTICA.ref es clave ajena a INMUEBLE (No / Prop. / Prop.)
VILLA(ref,urbanización,parcela)
VILLA.ref es clave ajena a INMUEBLE (No / Prop. / Prop.); En la tupla referenciada debe
cumplirse que tipo='villa'
EJERCICIO 16
SEDE(ciudad,dirección,director)
CUOTA(tipo,importe)
SOCIO(dni,nombre,dirección,fecha_pago,cta_banco,tipo_cuota,ciudad_sede)
SOCIO.tipo_cuota es clave ajena a CUOTA (No / Rest. / Prop.)
SOCIO.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.)
VOLUNTARIO(dni,nombre,dirección,tipo,ciudad_sede)
VOLUNTARIO.tipo ∈ {'administrativo','sanitario'}
VOLUNTARIO.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.)
SANITARIO(dni,profesión,disponible)
SANITARIO.dni es clave ajena a VOLUNTARIO (No / Rest. / Prop.)
SANITARIO. disponible ∈ {'sí','no'}
ENVÍO(código,destino,fecha,tipo)
ENVÍO.tipo ∈ {'humanitario','material'}
E_ALIMENTOS(código,alimento,toneladas)
E_ALIMENTOS.código es clave ajena a ENVÍO (No / Prop. / Prop.)
De los envíos de alimentos se guarda la cantidad enviada de cada alimento.
E_MEDICAMENTOS(código,medicina,unidades)
E_ MEDICAMENTOS.código es clave ajena a ENVÍO (No / Prop. / Prop.)
De los envíos de medicamentos se guarda la cantidad enviada de cada medicamento.
E_HUMANITARIO(código,dni)
E_HUMANITARIO.código es clave ajena a ENVÍO (No / Prop. / Prop.)
E_HUMANITARIO.dni es clave ajena a SANITARIO (No / Rest. / Prop.)
En esta tabla se guarda información de los voluntarios que han participado en los envíos
humanitarios.
Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002
16
EQUIPO(código,profesión,cantidad)
EQUIPO.código es clave ajena a ENVÍO (No / Prop. / Prop.)
En esta tabla se especifica el número de voluntarios de cada profesión distinta que ha
participado en cada envío.
ORGANIZACIÓN(código,ciudad_sede)
ORGANIZACIÓN.código es clave ajena a ENVÍO (No / Prop. / Prop.)
ORGANIZACIÓN.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.)
EJERCICIO 17
MATRONA(nombre,centro_aten)
Esta tabla almacena el nombre de cada matrona y su centro de atención.
HORARIO_CONSULTA(matrona,día,horas)
HORARIO_CONSULTA.matrona es clave ajena a MATRONA
Esta tabla almacena el horario de consulta de cada matrona, teniendo en cuenta que puede ser
diferente cada día de la semana.
PROFESORA(matrona,centro,hora)
PROFESORA.matrona es clave ajena a MATRONA
Esta tabla almacena las matronas que dan clases de preparación al parto, el centro donde lo
hacen y la hora (sólo dan una clase de una hora a la semana).
CENTRO_SALUD(nombre,matrona)
CENTRO_SALUD.matrona es clave ajena a MATRONA
Esta tabla almacena el nombre de cada centro de salud y la matrona que lleva a sus
embarazadas.
EMBARAZADA(nss,nombre,dirección,fecha_alta,semana,hijos,edad,centro_salud)
EMBARAZADA.centro_salud es clave ajena a CENTRO_SALUD
Esta tabla almacena los datos de cada embarazada, con su centro de salud.
ASISTENCIA(nssembarazada,fecha,matrona)
ASISTENCIA.nssembarazada es clave ajena EMBARAZADA
ASISTENCIA.matrona es clave ajena PROFESORA
Esta tabla almacena información sobre las clases a las que ha asistido cada embarazada. Se
supone que en un mismo día no se acude a dos clases.

Más contenido relacionado

PDF
Proyecto de Base de Datos (Parte II)
PPT
Unidad v integridad relacional
DOC
Actividades unidad 3 pacheco
PDF
SQL - Structured Query Language
PDF
Manejo de estructuras de datos
PDF
Programación en c
PDF
consultas en sql server
DOC
Sql procedimientos-almacenados
Proyecto de Base de Datos (Parte II)
Unidad v integridad relacional
Actividades unidad 3 pacheco
SQL - Structured Query Language
Manejo de estructuras de datos
Programación en c
consultas en sql server
Sql procedimientos-almacenados

Similar a Ejercicios base datos (20)

PDF
PDF
guia de ejercicios nro 2.pdf
PDF
dis02.pdf
PDF
Problemas de diseño de base de datos
PDF
Solucion bd
PDF
Solucion base de datos
PDF
Problemas de diseño de base de datos
PDF
Solucion bd (1)
DOCX
Nicolas olivar 6.0
DOCX
Nicolas olivar 5.0
DOCX
trabajo
DOCX
Felipe corterd
PDF
erd.pdf
DOCX
Nicolas olivar 6.1
DOCX
Nicolas olivar 6.1
PPTX
Modelo Entidad Relación
PPT
Base de Datos
PPTX
Normalización de Base de Datos
PPT
Clase 1: Diseño de Bases de Datos Relacionales
DOCX
Plantilla con-normas-icontec (4)
guia de ejercicios nro 2.pdf
dis02.pdf
Problemas de diseño de base de datos
Solucion bd
Solucion base de datos
Problemas de diseño de base de datos
Solucion bd (1)
Nicolas olivar 6.0
Nicolas olivar 5.0
trabajo
Felipe corterd
erd.pdf
Nicolas olivar 6.1
Nicolas olivar 6.1
Modelo Entidad Relación
Base de Datos
Normalización de Base de Datos
Clase 1: Diseño de Bases de Datos Relacionales
Plantilla con-normas-icontec (4)
Publicidad

Más de Sam Paredes Chaves (11)

PDF
PDF
Como hacer una_tesis
PDF
PDF
Procedimientos almacenados
PDF
Componentes smd nomenclaturas
PDF
Vocabulario ingles español
PDF
Medicion de circuitos electronicos
PDF
PDF
Programacion en java
Como hacer una_tesis
Procedimientos almacenados
Componentes smd nomenclaturas
Vocabulario ingles español
Medicion de circuitos electronicos
Programacion en java
Publicidad

Último (20)

PDF
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
DOCX
V UNIDAD - PRIMER GRADO. del mes de agosto
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PPTX
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
PDF
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
PDF
Fundamentos_Educacion_a_Distancia_ABC.pdf
PDF
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PDF
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
PDF
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
PDF
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
PDF
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
biología es un libro sobre casi todo el tema de biología
PDF
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
PDF
Tomo 1 de biologia gratis ultra plusenmas
PDF
Escuela Sabática 6. A través del Mar Rojo.pdf
DOCX
2 GRADO UNIDAD 5 - 2025.docx para primaria
CONFERENCIA-Deep Research en el aula universitaria-UPeU-EduTech360.pdf
V UNIDAD - PRIMER GRADO. del mes de agosto
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
AGENTES PATÓGENOS Y LAS PRINCIPAL ENFERMEAD.pptx
Escuela de Negocios - Robert kiyosaki Ccesa007.pdf
Fundamentos_Educacion_a_Distancia_ABC.pdf
COMUNICACION EFECTIVA PARA LA EDUCACION .pdf
PFB-MANUAL-PRUEBA-FUNCIONES-BASICAS-pdf.pdf
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
Integrando la Inteligencia Artificial Generativa (IAG) en el Aula
Breve historia de los Incas -- Patricia Temoche [Temoche, Patricia] -- Breve ...
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
benveniste-problemas-de-linguistica-general-i-cap-6 (1)_compressed.pdf
SESION 12 INMUNIZACIONES - CADENA DE FRÍO- SALUD FAMILIAR - PUEBLOS INDIGENAS...
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
biología es un libro sobre casi todo el tema de biología
Educación Artística y Desarrollo Humano - Howard Gardner Ccesa007.pdf
Tomo 1 de biologia gratis ultra plusenmas
Escuela Sabática 6. A través del Mar Rojo.pdf
2 GRADO UNIDAD 5 - 2025.docx para primaria

Ejercicios base datos

  • 1. Curso 2001/2002 Ejercicios de Diseño de Bases de Datos Relacionales Para cada ejercicio se presenta la solución final que se obtiene tras el diseño lógico, es decir, el conjunto de relaciones en tercera forma normal que forman el esquema lógico de la base de datos, las claves ajenas y sus reglas. EJERCICIO 1 CLIENTE(dnicli,nombre,dirección) Esta tabla almacena los datos personales de los clientes. PROCURADOR(dniproc,nombre,dirección) Esta tabla almacena los datos personales de los procuradores. ASUNTO(numexp,dnicli,fechaini,fechafin,estado) ASUNTO.dnicli es clave ajena a CLIENTE (cliente al que pertenece el asunto) Esta tabla almacena los datos de los asuntos y el cliente al que pertenecen. ASUNTO_PROC(numexp,dniproc) ASUNTO_PROC.numexp es clave ajena a ASUNTO (asunto que es llevado por algún procurador) ASUNTO_PROC.dniproc es clave ajena a PROCURADOR (procurador que lleva el asunto) En esta tabla se especifica qué procuradores llevan cada asunto y los asuntos que lleva cada procurador. Nulos Borrado Modificación ASUNTO.dnicli No (1) Restringir (2) Propagar ASUNTO_PROC.numexp No Propagar (3) Propagar ASUNTO_PROC.dniproc No Restringir (4) Propagar Veamos la interpretación de algunas de las reglas que acabamos de especificar para las claves ajenas, una vez consultadas con los propietarios de la información: (1) Todo asunto debe pertenecer a un cliente conocido. (2) No se puede eliminar un cliente si éste tiene algún asunto. (3) Si se elimina un asunto, ya no se mantiene la información respecto a los procuradores que lo llevaban. (4) No se puede eliminar un procurador si éste lleva o ha llevado algún asunto. EJERCICIO 2 ZOO(nombre,ciudad,país,tamaño,presupuesto) Esta tabla almacena los datos de los zoos. ESPECIE(nomcientífico,nomvulgar,familia,peligro) Esta tabla almacena los datos que caracterizan las especies animales.
  • 2. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 2 ANIMAL(numid,nomzoo,nomespecie,sexo,añonacim,país,continente) ANIMAL.nomzoo es clave ajena a ZOO (zoo en el que se encuentra el animal) ANIMAL.nomespecie es clave ajena a ESPECIE (especie a la que pertenece el animal) Esta tabla almacena los datos de los animales, la especie a la que pertenece cada uno y el zoo en el que se encuentran. Nulos Borrado Modificación ANIMAL.nomzoo No (1) Restringir (2) Propagar ANIMAL.nomespecie No (1) Restringir (3) Propagar Veamos la interpretación de algunas de las reglas que acabamos de especificar para las claves ajenas, después de haberlas consultado con los propietarios de la información: (1) Todo animal se encuentra en un zoo conocido y pertenece a una especie conocida. (2) No se puede eliminar un zoo que tiene animales. Se podría dar la opción de cambiar todos sus animales a otros zoos, y una vez repartidos todos, ya se puede eliminar el zoo que ha quedado vacío. (3) No se puede eliminar una especie si hay animales en los zoos que pertenecen a la misma. EJERCICIO 3 PERSONA(dni,nombre,dirección) En esta tabla se guardan los datos de las personas de interés. SOCIO(dnisocio) SOCIO.dnisocio es clave ajena a PERSONA (algunas personas son socios) En esta tabla se especifica qué personas de interés son socios del club. PATRON(dnipatrón) PATRON.dnipatrón es clave ajena a PERSONA (algunas personas son patrones) En esta tabla se especifica qué personas de interés son patrones. Nótese que una persona puede ser socio y patrón a la vez. BARCO(matrícula,dnisocio,nombre,amarre,cuota) BARCO.dnisocio es clave ajena a SOCIO (socio propietario del barco) Esta tabla almacena los datos de los barcos y el socio al que pertenece cada uno. SALIDA(matrícula,fecha,hora,destino,dnipatrón) SALIDA.matrícula es clave ajena a BARCO (barco en que se realiza la salida) SALIDA.dnipatrón es clave ajena a PATRON (patrón que lleva el barco en la salida) En esta tabla se almacena información sobre las salidas realizadas por cada barco y el patrón que lo lleva en cada ocasión. Tras consultar con los propietarios de la información, sabemos lo siguiente: Si se elimina una persona, ya no interesa saber si es socio y/o patrón. Si se elimina un socio, se eliminan también sus barcos y las salidas que éstos han realizado. No se puede eliminar un patrón si éste ha realizado alguna salida. Por lo tanto, las reglas de comportamiento de las claves ajenas serán:
  • 3. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 3 Nulos Borrado Modificación SOCIO.dnisocio No Propagar Propagar PATRON.dnipatrón No Propagar Propagar BARCO.dnisocio No Propagar Propagar SALIDA.matrícula No Propagar Propagar SALIDA.dnipatrón No Restringir Propagar Por motivos de eficiencia puede ser necesario cambiar el esquema, eliminando las tablas SOCIO y PATRON, quedando de este modo: PERSONA(dni,nombre,dirección,socio,patrón) PERSONA.socio ∈ {'sí','no'} PERSONA.patrón ∈ {'sí','no'} BARCO(matrícula,dnisocio,nombre,amarre,cuota) BARCO.dnisocio es clave ajena a PERSONA (Restricción: la persona propietaria del barco tiene que ser necesariamente un socio) SALIDA(matrícula,fecha,hora,destino,dnipatrón) SALIDA.matrícula es clave ajena a BARCO (barco en que se realiza la salida) SALIDA.dnipatrón es clave ajena a PERSONA (Restricción: la persona que lleva el barco tiene que ser necesariamente un patrón) Las dos nuevas restricciones que aparecen son reglas de integridad que se deben mantener en todos los estados de la base de datos. Cuando hacemos cambios en el esquema de la base de datos para conseguir una mayor eficiencia, solemos introducir nuevas reglas de integridad que se deberán respetar en todo momento. EJERCICIO 4 SOCIO(codsocio,nombre,dirección,teléfono) En esta tabla se almacenan los datos personales de los socios. DIRECTOR(nomdirector) En esta tabla se guardan nombres de directores de películas. Cualquier dato adicional que se desee saber de los directores, se colocará en esta tabla añadiendo nuevas columnas. El esquema de la base de datos es así flexible ya que acepta la introducción de nueva información en el esquema sin introducir por ello redundancias de datos. ACTOR(nomactor) En esta tabla se guardan nombres de actores de películas. Cualquier dato adicional sobre los actores se podrá añadir a esta tabla mediante nuevas columnas. El esquema sigue siendo flexible. GENERO(nomgénero) En esta tabla se guardan nombres de géneros de películas.
  • 4. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 4 PELICULA(título,nomdirector,nomgénero) PELICULA.nomdirector es clave ajena a DIRECTOR (director de la película) PELICULA.nomgénero es clave ajena a GENERO (género al que pertenece la película) En esta tabla se almacena el título de las películas que hay en el vídeo club, el director y el género de la película. CINTA(numcinta,título,nomdirector) (CINTA.título,CINTA.nomdirector) es clave ajena a PELICULA (película que hay grabada en la cinta) En esta tabla se guarda información sobre las cintas que posee el vídeo club. Cada cinta tiene grabada una sola película. PRESTAMO(numcinta,fecha,codsocio) PRESTAMO.numcinta es clave ajena a CINTA (cinta que está actualmente prestada) PRESTAMO.codsocio es clave ajena a SOCIO (socio que tiene prestada la cinta) Cuando se presta una cinta a un socio, se registra en esta tabla. DEVUELTA(numcinta,fecha,codsocio) Se supone que la fecha contiene información también sobre la hora en que se realiza el préstamo. DEVUELTA.numcinta es clave ajena a CINTA (cinta que fue prestada y ya ha sido devuelta) DEVUELTA.codsocio es clave ajena a SOCIO (socio que tomó prestada la cinta y ya la ha devuelto) Cuando un socio devuelve una cinta que tenía prestada, la tupla correspondiente a dicho préstamo se copia en esta tabla y se borra de PRESTAMO. LISTA_ESPERA(codsocio,título,nomdirector,fecha,hora) LISTA_ESPERA.codsocio es clave ajena a SOCIO (socio que está esperando ver una película) (LISTA_ESPERA.título,LISTA_ESPERA.nomdirector) es clave ajena a PELICULA (película que tiene socios en lista de espera) Los atributos fecha,hora se han añadido para mantener el orden en la lista de espera. En esta tabla se especifica la lista de espera de socios para cada película. Un mismo socio puede estar en la lista de espera de varias películas a la vez. Cuando el socio consigue la película, se elimina de la lista. REPARTO(título,nomdirector,nomactor) (REPARTO.título,REPARTO.nomdirector) es clave ajena a PELICULA (película que de la que conocemos el reparto de actores) REPARTO.actor es clave ajena a ACTOR (actor que aparece en el reparto de la película) En esta tabla se almacena información sobre las películas en las que ha intervenido cada actor. Un mismo actor puede haber participado en varias películas. GUSTA_DIRECTOR(codsocio,nomdirector) GUSTA_DIRECTOR.codsocio es clave ajena a SOCIO (socio al que le gustan directores) GUSTA_DIRECTOR.nomdirector es clave ajena a DIRECTOR (director que le gusta al socio) En esta tabla se almacenan los gustos, en cuanto a directores, de cada socio (a cada socio le pueden gustar varios directores). GUSTA_ACTOR(codsocio,nomactor) GUSTA_ACTOR.codsocio es clave ajena a SOCIO (socio al que le gustan actores) GUSTA_ACTOR.nomactor es clave ajena a ACTOR (actor que le gusta al socio) En esta tabla se almacenan los gustos, en cuanto a actores, de cada socio (a cada socio le pueden gustar varios actores).
  • 5. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 5 GUSTA_GENERO(codsocio,nomgénero) GUSTA_GENERO.codsocio es clave ajena a SOCIO (socio al que le gustan géneros de películas) GUSTA_GENERO.nomgénero es clave ajena a GENERO (género que le gusta al socio) En esta tabla se almacenan los gustos, en cuanto a géneros, de cada socio (a cada socio le pueden gustar varios géneros). Tras consultar con los propietarios de la información, se han establecido las siguientes reglas para las claves ajenas: Nulos Borrado Modific. PRESTAMO.codsocio No Restringir (1) Propagar DEVUELTA.codsocio No Restringir (1) Propagar LISTA_ESPERA.codsocio No Propagar (1) Propagar GUSTA_DIRECTOR.codsocio No Propagar (1) Propagar GUSTA_ACTOR.codsocio No Propagar (1) Propagar GUSTA_GENERO.codsocio No Propagar (1) Propagar (CINTA.título,CINTA.nomdirector) No Propagar (2) Propagar (LISTA_ESPERA.título,LISTA_ESPERA.nomdirector) No Restringir (2) Propagar (REPARTO.título,REPARTO.nomdirector) No Propagar (2) Propagar PRESTAMO.numcinta No Restringir (3) Propagar DEVUELTA.numcinta No Restringir (3) Propagar PELICULA.nomdirector No Restringir (4) Propagar GUSTA_DIRECTOR.nomdirector No Restringir (4) Propagar REPARTO.nomactor No Restringir (5) Propagar GUSTA_ACTOR.nomactor No Restringir (5) Propagar PELICULA.nomgénero No Restringir (6) Propagar GUSTA_GENERO.nomgénero No Restringir (6) Propagar (1) Si se elimina un socio, ya no se quiere conocer sus gustos en cuanto a directores, actores y géneros. Además, se elimina de las listas de espera en las que se encontraba. No se puede eliminar un socio que ha tomado prestada alguna película en alguna ocasión. (2) Si se elimina una película, se eliminan todas sus copias y la información sobre su reparto de actores. No se puede eliminar una película que tiene socios en lista de espera. (3) No se puede eliminar una cinta que ha sido prestada alguna vez. (4) No se pueden eliminar directores que han dirigido alguna película o que le gustan a algún socio. (5) No se pueden eliminar actores que aparecen en el reparto de alguna película o que le gustan a algún socio. (6) No se puede eliminar un género si hay películas del mismo o si es un género que le gusta a algún socio.
  • 6. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 6 Por motivos de eficiencia puede ser necesario cambiar el diseño, uniendo las tablas PRESTAMO y DEVUELTA, quedando de este modo: PRESTAMO(numcinta,fecha,codsocio,pres_dev) El nuevo atributo pres_dev tomará el valor 'prestada' si la cinta está prestada actualmente, y tomará el valor 'devuelta' si la cinta ya ha sido devuelta y el préstamo ha finalizado. Antes, la tabla PRESTAMO tenía como clave primaria numcinta, con lo que no era posible que una misma cinta apareciese como prestada a dos socios a la vez. Ahora, al unir los préstamos actuales y los finalizados, la clave primaria es (numcinta,fecha) y se debe añadir una regla de integridad que se encargue de respetar que cada cinta puede estar prestada (actualmente) a un único socio. EJERCICIO 5 BASE(codbase) En esta tabla se almacenan los códigos de las bases donde regresan pilotos y miembros de la tripulación y donde se realizan las revisiones de mantenimiento a los aviones. AVION(codavión,tipo,codbase) AVION.codbase es clave ajena a BASE Esta tabla almacena los datos de los aviones y la base en la que se les hace el mantenimiento. PILOTO(codpiloto,nombre,horas,codbase) PILOTO.codbase es clave ajena a BASE Esta tabla almacena los datos de los pilotos y la base a la que regresan al final de la jornada. MIEMBRO(codmiembro,nombre,codbase) MIEMBRO.codbase es clave ajena a BASE Esta tabla almacena los datos de los miembros de tripulación y la base a la que regresan al final de la jornada. VUELO(numvuelo,origen,destino,hora) En esta tabla se almacena la información de los vuelos que se realizan diariamente. VIAJE(numvuelo,fecha,codavión,codpiloto) VIAJE.numvuelo es clave ajena a VUELO VIAJE.codavión es clave ajena a AVION VIAJE.codpiloto es clave ajena a PILOTO En esta tabla se almacena la información de cada viaje: vuelo que realiza, avión y piloto. TRIPULACION(numvuelo,fecha,codmiembro) (TRIPULACION.numvuelo,TRIPULACION.fecha) es clave ajena a VIAJE TRIPULACION.codmiembro es clave ajena a MIEMBRO En esta tabla se especifica qué miembros de tripulación han ido en cada viaje. Las siguientes especificaciones nos ayudarán a establecer las reglas de comportamiento de las claves ajenas. No se puede eliminar una base en la que se realiza el mantenimiento a algún avión o a la que regresan pilotos o miembros tras los vuelos de una jornada. Si se elimina un vuelo, se eliminan todos los viajes realizados en ese vuelo y los que se han planificado. Si se elimina un avión, en los viajes que ha realizado o tiene planificados, se pone la referencia al avión a nulo. Aquellos viajes que están por realizar deberán ser asignados a otros aviones.
  • 7. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 7 Si se elimina un piloto, en los viajes que ha realizado o tiene planificados, se pone la referencia al piloto a nulo. Aquellos viajes que están por realizar deberán ser asignados a otros pilotos. Si se elimina un viaje, ya no se quiere conocer los miembros de la tripulación asignados al mismo. Nulos Borrado Modificación AVION.codbase No Restringir Propagar PILOTO.codbase No Restringir Propagar MIEMBRO.codbase No Restringir Propagar VIAJE.numvuelo No Propagar Propagar VIAJE.codavión Sí Anular Propagar VIAJE.codpiloto Sí Anular Propagar (TRIPULACION.numvuelo,TRIPULACION.fecha) No Propagar Propagar TRIPULACION.codmiembro No Propagar Propagar EJERCICIO 6 TITULACION(nomtitu) Esta tabla almacena los nombres de las titulaciones de la universidad. DEPARTAMENTO(nomdepto) Esta tabla almacena los nombres de los departamentos de la universidad. AREA(nomárea,nomdepto) AREA.nomdepto es clave ajena a DEPARTAMENTO Esta tabla almacena los nombres de las áreas que forman cada departamento de la universidad. Cada área pertence a un solo departamento. ASIGNATURA(codasig,nombre,tipo,curso,libconf,limadm,credteo,credlab, grteo,grlab,nomtitu,nomárea) ASIGNATURA.nomárea es clave ajena a AREA ASIGNATURA.nomtitu s clave ajena a TITULACION Esta tabla almacena los datos de las asignaturas que pertencen a cada una de las titulaciones de la universidad y el área a la que están adscritas. INCOMPATIBLE(codasig,codincomp) INCOMPATIBLE.codasig es clave ajena a ASIGNATURA INCOMPATIBLE.codincomp es clave ajena a ASIGNATURA Las asignaturas que aparecen en INCOMPATIBLE.codasig tienen incompatibilidades: es necesario superar otras asignaturas para poderlas aprobar. Las asignaturas que aparecen en INCOMPATIBLE.codincomp son requisitos de otras asignaturas: es necesario superarlas para poder aprobar esas otras asignaturas. Por ejemplo, buscando las filas donde codasig='F38' encontramos en codincomp las asignaturas que hay que superar para poder aprobar la F38. Buscando las filas donde codincomp='F11' encontramos en codasig las asignaturas que no se pueden aprobar si no se ha superado la F11. En esta tabla se especifican las incompatibilidades entre asignaturas. EQUIVALENTE(codasig,codequiv)
  • 8. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 8 EQUIVALENTE.codasig es clave ajena a ASIGNATURA EQUIVALENTE.codequiv es clave ajena a ASIGNATURA En esta tabla se especifican las equivalencias entre asignaturas. LIBCONF(codasig,nomtitu) LIBCONF.codasig es clave ajena a ASIGNATURA LIBCONF.nomtitu es clave ajena a TITULACION En esta tabla se especifica qué asignaturas se ofertan como libre configuración para cada titulación. PROFESOR(nomprof,despacho,nomarea) PROFESOR.nomárea es clave ajena a AREA Esta tabla almacena los datos de los profesores de la universidad y el área a la que pertence cada uno. CONSULTAS(nomprof,día,horas) CONSULTAS.nomprof es clave ajena a PROFESOR En esta tabla se almacena el horario de consultas de cada profesor. Un profesor puede tener su horario repartido en varios días y en un mismo día, puede tener varias franjas horarias diferentes. DOCENCIA(nomprof,codasig) DOCENCIA.nomprof es clave ajena a PROFESOR DOCENCIA.codasig es clave ajena a ASIGNATURA En esta tabla se especifica de qué asignaturas imparte clase cada profesor. Una misma asignatura puede ser impartida por varios profesores. Hay que añadir una regla de integridad: todos los profesores que imparten clase de una misma asignatura deben pertenecer al área a la que pertenece la asignatura. El hecho de conservar una relación que en principio es redundante nos facilita el control de la integridad. Nulos Borrado Modificación AREA.nomdepto No Propagar Propagar ASIGNATURA.nomárea Sí Restringir Propagar PROFESOR.nomárea No Restringir Propagar ASIGNATURA.nomtitu Sí Propagar Propagar LIBCONF.nomtitu No Propagar Propagar INCOMPATIBLE.codasig No Propagar Propagar INCOMPATIBLE.codincomp No Restringir Propagar EQUIVALENTE.codasig No Propagar Propagar EQUIVALENTE.codequiv No Propagar Propagar LIBCONF.codasig No Propagar Propagar DOCENCIA.codasig No Propagar Propagar CONSULTAS.nomprof No Propagar Propagar DOCENCIA.nomprof No Restringir Propagar
  • 9. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 9 No se permite eliminar un área que tiene asignaturas asignadas o que tiene profesores. No se permite eliminar una asignatura que es requisito de otra. No se permite eliminar un profesor que tiene docencia asignada. EJERCICIO 7 CINE(nomcine,calle,número,teléfono) En esta tabla se almacenan los datos de los cines. TARIFA(nomcine,día,precio) TARIFA.nomcine es clave ajena a CINE TARIFA.día ∈ {‘espectador’,’jubilado’,’festivo’,’normal’} En esta tabla se especifica la tarifa de precios de cada cine según el día. PELICULA(título,clasificación,director,género,actor1,actor2,actor3) PELICULA.clasificación ∈ {‘tolerada_menores’,’no_recomendada_menores_13’} PELICULA.género ∈ {‘dibujos’,’comedia’,’drama’’} En esta tabla se almacena información sobre las películas que se proyectan. PASES(nomcine,título,hora) PASES.nomcine es clave ajena a CINE PASES.título es clave ajena a PELICULA En esta tabla se especifican las películas que se están pasando en cada cine y el horario de los pases de cada una. Nulos Borrado Modificación TARIFA.nomcine No Propagar Propagar PASES.nomcine No Propagar Propagar PASES.título No Restringir Propagar EJERCICIO 8 ARTICULO(título,localización,email) PALABRA_CLAVE(título,palabra) PALABRA_CLAVE.título es clave ajena a ARTICULO INFORME_TECNICO(título,centro,número,mes,año) INFORME_TECNICO.título es clave ajena a ARTICULO CONGRESO(congreso,tipo,frecuencia,añoinicio) EDICION_CONGRESO.congreso es clave ajena a CONGRESO EDICION_CONGRESO(congreso,edición,fechainicio,fechafin,ciudad,país) ARTICULO_ACTA(título,congreso,edición) ARTICULO_ACTA.título es clave ajena a ARTICULO (ARTICULO_ACTA.congreso,ARTICULO_ACTA.edición) es clave ajena a EDICION_CONGRESO REVISTA_CIENTIFICA(revista,editor,añoinicio,frecuencia) TEMA_REVISTA(revista,tema)
  • 10. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 10 TEMA_REVISTA.revista es clave ajena a REVISTA_CIENTIFICA NUMERO_REVISTA.revista es clave ajena a REVISTA_CIENTIFICA NUMERO_REVISTA(revista,número,año) ARTICULO_REVISTA(título,revista,número,primpágina,ultpágina) ARTICULO_REVISTA.título es clave ajena a ARTICULO (ARTICULO_REVISTA.revista,ARTICULO_REVISTA.número) es clave ajena a NUMERO_REVISTA INVESTIGADOR(nombre,centro,email) TEMA_INVESTIGADOR(nombre,tema) TEMA_INVESTIGADOR.nombre es clave ajena a INVESTIGADOR AUTOR(título,nombre) AUTOR.título es clave ajena a ARTICULO AUTOR.nombre es clave ajena a INVESTIGADOR Nulos Borrado Modificación PALABRA_CLAVE.título No Propagar Propagar INFORME_TECNICO.título No Propagar Propagar ARTICULO_ACTA.título No Propagar Propagar ARTICULO_REVISTA.título No Propagar Propagar AUTOR.título No Propagar Propagar EDICION_CONGRESO.congreso No Propagar Propagar (ARTICULO_ACTA.congreso, ARTICULO_ACTA.edición) No Restringir Propagar TEMA_REVISTA.revista No Propagar Propagar NUMERO_REVISTA.revista No Propagar Propagar (ARTICULO_REVISTA.revista, ARTICULO_REVISTA.número) No Restringir Propagar TEMA_INVESTIGADOR.nombre No Propagar Propagar AUTOR.nombre No Restringir Propagar EJERCICIO 9 ORGANISMO(nombre,dirección,población,cp,teléfono) CONVOCATORIA(número,programa,fecha,fechalim,web,boedogv,fecharesol,organismo) CONVOCATORIA.organismo es clave ajena a ORGANISMO (No / Rest. / Prop.) SOLICITUD(título,fechapresent,fechaini,fechafin,importe,numreg,numconv,progconv,aprob,invp pal) (SOLICITUD.numconv,SOLICITUD.progconv) es clave ajena a CONVOCATORIA (No / Rest. / Prop.) SOLICITUD.invppal es clave ajena a INVESTIGADOR (No / Rest. / Prop.)
  • 11. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 11 INVESTIGADOR(nombre,grupo,área) INVESTIGADOR.grupo es clave ajena a GRUPO (Sí / Rest. / Prop.) INVESTIGADOR.área es clave ajena a AREA (No / Rest. / Prop.) PARTICIPACION(solicitud,investigador,horas) PARTICIPACION.solicitud es clave ajena a SOLICITUD (No / Prop. / Prop.) PARTICIPACION.investigador es clave ajena a INVESTIGADOR (No / Prop. / Prop.) GRUPO(nombre,invresp) GRUPO.invresp es clave ajena a INVESTIGADOR (No / Rest. / Prop.) DEPARTAMENTO(nombre,director) DEPARTAMENTO.director es clave ajena a INVESTIGADOR (Sí / Rest. / Prop.) AREA(nombre,depto) AREA.depto es clave ajena a DEPARTAMENTO (No / Prop. / Prop.) EJERCICIO 10 MODELO(marca,modelo,precio,dto,potencia,cilindrada) AUTOMOVIL(bastidor,marca,modelo) (AUTOMOVIL.marca,AUTOMOVIL.modelo) es clave ajena a MODELO (No / Rest. / Prop.) STOCK(bastidor,servoficial) STOCK.bastidor es clave ajena a AUTOMOVIL (No / Prop. / Prop.) STOCK.servoficial es clave ajena a VENDEDOR (Sí / Anular / Prop.) VENDIDO(bastidor,matrícula,precio,fechaentrega,modopago,stock,nifvendedor) VENDIDO.bastidor es clave ajena a AUTOMOVIL (No / Rest. / Prop.) VENDIDO.nifvendedor es clave ajena a VENDEDOR (No / Rest. / Prop.) VENDEDOR(nif,nombre,dirección,tipo) EQUIP_SERIE(marca,modelo,carac) (EQUIP_SERIE.marca,EQUIP_SERIE.modelo) es clave ajena a MODELO (No / Pr. / Pr.) EQUIP_EXTRA(marca,modelo,carac,precio) (EQUIP_EXTRA.marca,EQUIP_EXTRA.modelo) es clave ajena a MODELO (No / Pr. / Pr.) EQUIP_VENDIDO(bastidor,carac,precio) EQUIP_VENDIDO.bastidor es clave ajena a VENDIDO (No / Prop. / Prop.) Los atributos EQUIP_SERIE.carac, EQUIP_EXTRA.carac y EQUIP_VENDIDO.carac están definidos sobre el mismo dominio. EJERCICIO 11 PERSONA(numss,nif,nombre,dirección,teléfono,población,provincia,codpostal) En esta tabla aparecen los datos comunes a todas las personas, sean médicos, otros empleados o pacientes. De este modo, si por ejemplo un empleado es también paciente del centro de salud, se evita la repetición de sus datos. Los atributos población y provincia admiten nulos ya que no se aplican a los pacientes. MEDICO(numss,numcol,tipo) tipo ∈ {'titular', 'interino', 'sustituto'} MEDICO.numss es clave ajena a PERSONA (No / Prop. / Prop.)
  • 12. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 12 HORARIO(numss,día,horario) HORARIO.numss es clave ajena a MEDICO (No / Prop. / Prop.) SUSTITUCION(numss,fechalta,fechabaja) SUSTITUCION.numss es clave ajena a MEDICO (No / Prop. / Prop.) Hay que tener en cuenta que sólo los médicos sustitutos hacen sustituciones. EMPLEADO(numss,tipo) tipo ∈ {'ATS', 'ATS de zona', 'auxiliar enfermería', 'celador', 'administrativo'} EMPLEADO.numss es clave ajena a PERSONA (No / Prop. / Prop.) VACACIONESMED(numss,fechaini,fechafin) VACACIONESMED.numss es clave ajena a MEDICO (No / Prop. / Prop.) VACACIONESEMP(numss,fechaini,fechafin) VACACIONESEMP.numss es clave ajena a EMPLEADO (No / Prop. / Prop.) PACIENTE(numss,numssmédico) PACIENTE.numss es clave ajena a PERSONA (No / Prop. / Prop.) PACIENTE.numssmédico es clave ajena a MEDICO (No / Rest. / Prop.) EJERCICIO 12 EMPRESA(nif,nombre,dirección,director) CADENA(nomcadena,director,nifemisorasede,nifempresa) CADENA.nifempresa es clave ajena a EMPRESA (No / Prop. / Prop.) CADENA.nifemisorasede es clave ajena a EMISORA (No / Rest. / Prop.) EMISORA(cif,nombre,dirección,director,banda,provincia,nomcadena) EMISORA.nomcadena es clave ajena a CADENA (No / Prop. / Prop.) PROGRAMA(nomprog,responsable,precio/seg) PROG_LOCAL(nomprog,nifemisora) PROG_LOCAL.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.) PROG_LOCAL.nifemisora es clave ajena a EMISORA (No / Prop. / Prop.) PROG_CADENA(nomprog,nomcadena) PROG_CADENA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.) PROG_CADENA.nomcadena es clave ajena a CADENA (No / Prop. / Prop.) FRANJA(nomprog,horainicio,día,duración) FRANJA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.) PATROCINADOR(contrato,nombre,duración,importe) PATROCINA(contrato,nomprog,segundos) PATROCINA.contrato es clave ajena a PATROCINADOR (No / Rest. / Prop.) PATROCINA.nomprog es clave ajena a PROGRAMA (No / Prop. / Prop.) EJERCICIO 13 NIÑO(numatri,nombre,fechanac,fechaingreso,fechabaja,dnipaga) NIÑO.dnipaga es clave ajena a PERSONA (No / Rest. / Prop.) La persona a la que se hace referencia debe tener anotada una cuenta corriente. El atributo fechabaja debe aceptar nulos.
  • 13. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 13 PERSONA(dni,nombre,dirección,telf1,telf2,ctacorriente) Aquí están las personas autorizadas a recoger niños y las personas que pagan por la asistencia de los niños a la guardería, por lo tanto telf2 y ctacorriente aceptarán nulos. Si una persona paga por algún niño, es obligatorio que tenga un número de cuenta corriente. RECOGE(dni,numatri,relación) RECOGE.dni es clave ajena a PERSONA (No / Prop. / Prop.) RECOGE.numatri es clave ajena a NIÑO (No / Prop. / Prop.) Se ha escogido como clave primaria la combinación de los dos atributos porque una persona puede recoger a varios niños y cada niño puede ser recogido por varias personas. PLATO(nomplato,numenú) En esta tabla se especifican los platos que componen cada menú. Se ha considerado que un mismo plato puede formar parte de varios menús. INGREDIENTE(nomingred,nomplato) Los atributos PLATO.nomplato e INGREDIENTE.nomplato están definidos sobre el mismo dominio. Además, los nombres de los platos en INGREDIENTE.nomplato deben aparecer como valores en PLATO.nomplato En esta tabla se especifican los ingredientes que componen cada plato. Un mismo ingrediente puede aparecer en varios platos. ALERGIA(numatri,nomingred) Los atributos INGREDIENTE.nomingred y ALERGIA.nomingred están definidos sobre el mismo dominio. En esta tabla se especifican las alergias de cada niño, teniendo en cuenta que un niño puede tener alergia a varios ingredientes. COMIDA(numatri,fecha,numenú) COMIDA.numatri es clave ajena a NIÑO (No / Prop. / Prop.) En esta tabla se especifican las comidas realizadas por cada niño y cada día. Se ha supuesto que en una misma fecha distintos niños pueden tomar distintos menús (a causa de las alergias o por enfermedad).
  • 14. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 14 EJERCICIO 14 nombre CONVOCATORIA ORGANISMO SOLICITUD GRUPO_INVESTDEPARTAMENTO promueve tiene realiza pertenece (1,n)(1,1) (0,n) (1,1) (1,1) (0,n) (1,1)(1,n) nombre dirección población cp teléfono importe f_presenttítulo aprob f_ini f_fin num_reg fecha programa número f_lim WEB BOE/DOGV f_resol nombre (0,1) pertenece un_gestión (1,n) (1,1) nombre (0,1) (1,1) (1,1)(0,n) tiene aprob. DE_SOLIC CON_EMP CONTRATO(t,e) IVA código importe trabajo f_ini f_fin (1,1) (1,n) EMPRESA NIF tipo sector dir telf CP pob pers_resp perten UNIDAD_GESTION(nombre) DEPARTAMENTO(nombre,unidad) DEPARTAMENTO.unidad es clave ajena a UNIDAD_GESTION (No / Rest. / Prop.) EMPRESA(nif,dirección,teléfono,codpostal,población,tipo,sector) CONTRATO(código,iva) CONTRATO_SOLICITUD(código,solicitud) CONTRATO_SOLICITUD.código es clave ajena a CONTRATO (No / Prop. / Prop.) CONTRATO_EMPRESA.solicitud es clave ajena a SOLICITUD (No / Rest. / Prop.) CONTRATO_EMPRESA(código,importe,trabajo,fechaini,fechafin,grupo,empresa) CONTRATO_EMPRESA.código es clave ajena a CONTRATO (No / Prop. / Prop.) CONTRATO_EMPRESA.grupo es clave ajena a GRUPO (No / Rest. / Prop.) CONTRATO_EMPRESA.empresa es clave ajena a EMPRESA (No / Rest. / Prop.) EJERCICIO 15 PROPIETARIO(nomprop,teléfono) CLIENTE(nomcli) INMUEBLE(ref,nomprop,m2,dirección,alquiler,venta,oficina,tipo,zona) INMUEBLE.nomprop es clave ajena a PROPIETARIO (No / Rest. / Prop.) INMUEBLE.alquiler y INMUEBLE.venta son los precios de alquiler y venta; si alguno es nulo, es que el inmueble no se oferta de ese modo. INMUEBLE.oficina es nulo si no se tiene las llaves del inmueble
  • 15. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 15 INMUEBLE.tipo ∈ {'piso ocasión', 'piso nuevo', 'casa', 'villa', 'local'} INMUEBLE.zona es nulo si tipo='villa' VISITAS(ref,fecha,nomcli,comentario) VISITAS.ref es clave ajena a INMUEBLE (No / Prop. / Prop.) VISITAS.fecha almacena fecha y hora VISITAS.nomcli es clave ajena a CLIENTE (No / Prop. / Prop.) ESTANCIA(tipoestancia) VIVIENDA(ref,tipoestancia,cantidad) VIVENDA.ref es clave ajena a INMUEBLE; en la tupla referenciada debe cumplirse que tipo ∈ {'piso ocasión', 'piso nuevo', 'casa', 'villa'} VIVENDA.tipoestancia es clave ajena a ESTANCIA (No / Rest. / Prop.) CARACTERISTICA(ref,característica) CARACTERISTICA.ref es clave ajena a INMUEBLE (No / Prop. / Prop.) VILLA(ref,urbanización,parcela) VILLA.ref es clave ajena a INMUEBLE (No / Prop. / Prop.); En la tupla referenciada debe cumplirse que tipo='villa' EJERCICIO 16 SEDE(ciudad,dirección,director) CUOTA(tipo,importe) SOCIO(dni,nombre,dirección,fecha_pago,cta_banco,tipo_cuota,ciudad_sede) SOCIO.tipo_cuota es clave ajena a CUOTA (No / Rest. / Prop.) SOCIO.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.) VOLUNTARIO(dni,nombre,dirección,tipo,ciudad_sede) VOLUNTARIO.tipo ∈ {'administrativo','sanitario'} VOLUNTARIO.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.) SANITARIO(dni,profesión,disponible) SANITARIO.dni es clave ajena a VOLUNTARIO (No / Rest. / Prop.) SANITARIO. disponible ∈ {'sí','no'} ENVÍO(código,destino,fecha,tipo) ENVÍO.tipo ∈ {'humanitario','material'} E_ALIMENTOS(código,alimento,toneladas) E_ALIMENTOS.código es clave ajena a ENVÍO (No / Prop. / Prop.) De los envíos de alimentos se guarda la cantidad enviada de cada alimento. E_MEDICAMENTOS(código,medicina,unidades) E_ MEDICAMENTOS.código es clave ajena a ENVÍO (No / Prop. / Prop.) De los envíos de medicamentos se guarda la cantidad enviada de cada medicamento. E_HUMANITARIO(código,dni) E_HUMANITARIO.código es clave ajena a ENVÍO (No / Prop. / Prop.) E_HUMANITARIO.dni es clave ajena a SANITARIO (No / Rest. / Prop.) En esta tabla se guarda información de los voluntarios que han participado en los envíos humanitarios.
  • 16. Soluciones a los ejercicios de Diseño de Bases de Datos Relacionales Curso 2001/2002 16 EQUIPO(código,profesión,cantidad) EQUIPO.código es clave ajena a ENVÍO (No / Prop. / Prop.) En esta tabla se especifica el número de voluntarios de cada profesión distinta que ha participado en cada envío. ORGANIZACIÓN(código,ciudad_sede) ORGANIZACIÓN.código es clave ajena a ENVÍO (No / Prop. / Prop.) ORGANIZACIÓN.ciudad_sede es clave ajena a SEDE (No / Rest. / Prop.) EJERCICIO 17 MATRONA(nombre,centro_aten) Esta tabla almacena el nombre de cada matrona y su centro de atención. HORARIO_CONSULTA(matrona,día,horas) HORARIO_CONSULTA.matrona es clave ajena a MATRONA Esta tabla almacena el horario de consulta de cada matrona, teniendo en cuenta que puede ser diferente cada día de la semana. PROFESORA(matrona,centro,hora) PROFESORA.matrona es clave ajena a MATRONA Esta tabla almacena las matronas que dan clases de preparación al parto, el centro donde lo hacen y la hora (sólo dan una clase de una hora a la semana). CENTRO_SALUD(nombre,matrona) CENTRO_SALUD.matrona es clave ajena a MATRONA Esta tabla almacena el nombre de cada centro de salud y la matrona que lleva a sus embarazadas. EMBARAZADA(nss,nombre,dirección,fecha_alta,semana,hijos,edad,centro_salud) EMBARAZADA.centro_salud es clave ajena a CENTRO_SALUD Esta tabla almacena los datos de cada embarazada, con su centro de salud. ASISTENCIA(nssembarazada,fecha,matrona) ASISTENCIA.nssembarazada es clave ajena EMBARAZADA ASISTENCIA.matrona es clave ajena PROFESORA Esta tabla almacena información sobre las clases a las que ha asistido cada embarazada. Se supone que en un mismo día no se acude a dos clases.