El
problema de las relaciones Muchas a Muchas.
En las entradas anteriores se ha visto que entre
las entidades se pueden establecer relaciones de tres tipos:
Relaciones 1 a 1.
Relaciones 1 a Muchas (o Muchas a 1).
Relaciones Muchas a Muchas.
De forma premeditada, se ha evitado tanto en las
explicaciones como en los ejercicios la aparición de relaciones Muchas a
Muchas, ya que estas relaciones presentan muchos problemas a la hora de
realizar su traspaso a tablas para luego crear la base de datos e introducirla
en un programa gestor de bases de datos.
Así pues las relaciones Muchas a Muchas se
consideran relaciones “prohibidas” que deben ser evitadas a toda costa.
Básicamente, las relaciones Muchas a Muchas pueden
ser anuladas convirtiéndolas en relaciones 1 a Muchas (o Muchas a 1) De hecho, una buena
base de datos solo contendrá relaciones 1 a 1 o 1 a Muchas, y se considera que ha sido mal
diseñada si aparece alguna relación Muchas a Muchas.
En esta entrada se verá qué hacer cuando aparezca
una relación Muchas a Muchas.
EJERCICIO
GUIADO Nº 1
SUPUESTO
“ACADEMIA”
Interesa almacenar cierta información sobre una
academia. Concretamente se quiere almacenar la siguiente información:
Interesa almacenar información sobre los alumnos de
la academia. Interesa almacenar los nombres del alumno, los apellidos, el DNI y
la fecha de nacimiento.
Interesa almacenar información sobre los cursos que
se da en la academia. Interesa almacenar el código del curso, el nombre del
curso, el número de horas y el nombre del profesor que lo imparte.
En la academia hay una pequeña biblioteca. Interesa
almacenar información sobre los libros de esta biblioteca. Se almacenará el
código del libro, el título, el autor y el tema del libro.
Hay que tener en cuenta que la biblioteca está
abierta a los alumnos de la academia y se les puede hacer préstamos.
PASO A
MODELO ENTIDAD – RELACIÓN
- Entidades
participantes:
Estudiando el supuesto anterior, se ve claro que
existen tres entidades claras: alumnos,
cursos y libros.
- Atributos
de cada entidad y Atributo clave:
No es complicado deducir los atributos de cada
entidad. Son los siguientes (subrayado el atributo clave):
Alumnos
Nombres
Apellidos
DNI
Fecha
de nacimiento
Cursos
Código
del curso
Nombre
del curso
Número
de horas
Nombre
del profesor
Libros
Código
del libro
Título
Autor
Tema
- Relaciones:
Veamos las relaciones:
Los “alumnos hacen cursos” por lo que la entidad Alumnos está relacionada con Cursos.
Por otro lado los “libros se prestan a los alumnos”
por lo que la entidad Alumnos está
relacionada con la entidad Libros.
Y no
hay más relaciones en la base de datos.
- Tipos
de relaciones.
Veamos la relación “los alumnos hacen cursos”:
Un alumno puede apuntarse a muchos cursos. Por otro
lado, en un curso se apuntan muchos alumnos. Es una relación Muchas a Muchas:
Veamos ahora la relación “los libros se prestan a
los alumnos”:
Un alumno puede pedir prestado varios libros
mientras esté en la academia, por otro lado, un mismo libro puede ser prestado
a varios alumnos (No a la vez, claro está. El libro es prestado a un alumno, y
cuando es devuelto se le presta a otro alumno).
Por tanto tenemos también una relación Muchas a
Muchas:
- Prohibición
de las relaciones Muchas a Muchas.
Tal como se ha explicado al principio de la hoja
guiada, las relaciones Muchas a Muchas están prohibidas y tienen que ser
eliminadas del Modelo Entidad Relación.
En nuestro caso tenemos dos relaciones Muchas a
Muchas que serán reconvertidas a relaciones Muchas a 1 (o 1 a Muchas) para hacerlas
desaparecer.
- Existencia
de entidad intermedia.
La aparición de una relación Muchas a Muchas suele
ser debido a un “mal diseño de la base de datos”. Este mal diseño viene dado
por la falta de información proporcionada por el enunciado del supuesto.
Esto será habitual, ya que el cliente que nos
encarga el programa no siempre se explica con la claridad que desearíamos.
La aparición de relaciones Muchas a Muchas es
debido a la existencia de una entidad
intermedia que no hemos tenido en cuenta, ya sea por la falta de
información del enunciado, o bien porque se ha dado por sabida.
Esta entidad intermedia está entre las dos
entidades que se relacionan de forma Muchas a Muchas. Al no tener en cuenta
esta entidad intermedia, el resultado producido es la aparición de la relación
Muchas a Muchas:
Así pues, cuando aparezca una relación Muchas a
Muchas, tendremos que averiguar cual es la entidad intermedia que sin querer
hemos ignorado, y añadirla al modelo. Al hacer esto la relación Muchas a Muchas
se sustituirá por dos relaciones 1
a Muchas.
Por otro lado, la entidad intermedia puede contener
atributos muy interesantes para la base de datos, que igualmente hayamos
ignorado.
- Eliminación
de la relación Muchas a Muchas “los
alumnos hacen cursos”.
Cada vez que un alumno se apunta a un curso, se matricula,
o dicho de otra forma, rellena una matrícula, o dicho de otra forma, hace una
reserva de plaza para el curso.
Estas reservas o matrículas (o como quiera
llamarlo) es la entidad intermedia que habíamos pasado por alto, y que nos
resuelve el problema de la relación Muchas a Muchas.
Veamos que sucede si ponemos la entidad matrículas entre las entidades alumnos y cursos.
Aparecen dos nuevas relaciones: “los alumnos se
matriculan”, y “una matrícula es para un
curso”.
- Estudio
de las nuevas relaciones.
Cuando añadimos la entidad intermedia a la relación
Muchas a Muchas, aparecen dos relaciones nuevas que suelen ser del tipo 1 a Muchas.
Veamos:
Relación “los
alumnos se matriculan”.
Un alumno puede matricularse muchas veces (se puede
apuntar a muchos cursos). Así pues un alumno realiza o rellena varias
matrículas.
Sin embargo, una matrícula pertenece a un solo
alumno.
Por tanto es una relación 1 a Muchas:
Relación “una
matrícula es para un curso”.
Cada vez que se rellena una matrícula es para un
solo curso. (Si pudieras leer el formulario que rellena el alumno, verías que
en el papel se indica el curso al que se apunta, y solo es uno).
Por otro lado, para un curso se rellenan varias
matrículas (tantas como alumnos quieren apuntarse al curso).
Por tanto es una relación 1 a Muchas:
- Solución
del problema Muchas a Muchas:
Finalmente, al descubrir la entidad intermedia de
la relación Muchas a Muchas, esta relación ha desaparecido y se ha convertido
en dos relaciones 1 a
Muchas, solucionándose el problema.
- Atributos
de la Entidad Intermedia.
Habrá que asignar primero un atributo clave a la
entidad intermedia. En el ejemplo, será interesante asignar un número de
matrícula, de forma que no haya dos matrículas con el mismo número.
En la entidad matrículas se puede almacenar otras
informaciones, como por ejemplo lo que paga el alumno por hacer el curso.
También se podría almacenar la nota final obtenida
por el alumno.
Finalmente, también hay que asignar a la entidad
intermedia las claves foráneas. Recuerda que en las relaciones 1 a Muchas, hay que pasar la
clave de la parte 1 a
la parte Muchas.
Si observas la relación:
Tendremos que pasar el campo DNI desde la entidad alumnos
a matrículas, y el campo código curso desde la entidad cursos a matrículas, debido a la regla correspondiente a las relaciones 1 a Muchas.
Por lo tanto, la entidad Matrículas del ejemplo
quedará con los siguientes atributos:
Matrículas
Número
(atributo clave)
Pago
Nota
final
DNI
(clave foránea de alumnos)
Código
Curso (clave foránea de cursos)
- Solución
de la relación “libros son prestados
a alumnos”
Veamos la solución de la otra relación problemática
Muchas a Muchas:
- Entidad
intermedia:
Si estudiamos bien la relación entre alumnos y
libros de la biblioteca, nos daremos cuenta que existe una entidad intermedia
que hace referencia a cada préstamo del libro.
Es decir, la entidad intermedia que hemos pasado
por alto es Préstamos, la cual guardará información sobre los préstamos de
los libros.
Con esta entidad, la relación queda así:
- Estudio
de las nuevas relaciones:
Relación Alumnos – Préstamos: “Los alumnos piden préstamos de libros”
Un alumno puede solicitar varios préstamos mientras
está en la academia. Pero cada préstamo en concreto se hace a un alumno:
Relación 1 a
Muchas.
Relación Préstamos – Libros: “Un préstamo es de un libro”
Un libro puede participar en muchos préstamos
(realizados a distintos alumnos en momentos diferentes), pero cada préstamo en
concreto hace referencia a un libro solamente. Relación 1 a Muchas.
Para entender estas relaciones, imagine que cada
vez que se solicita un préstamo se tiene que rellenar una ficha. En esta ficha
se escribe el nombre del alumno y el nombre del libro prestado.
Un alumno tendrá muchas fichas (si ha pedido
prestado muchos libros), pero una ficha concreta solo tiene el nombre de un
alumno.
Por otro lado, un libro aparecerá en muchas fichas
(ya que el libro es prestado muchas veces), pero en una ficha concreta solo
aparece el nombre de un libro.
La idea de “ficha” es equivalente a la idea de
“préstamo”. O aun mejor, se podría hablar de “ficha de préstamos”.
- Atributos
de la nueva entidad:
Así pues, con la creación de la entidad préstamos
se ha solucionado el problema de la relación Muchas a Muchas.
Ahora hay que determinar los atributos que tendrá
la nueva entidad préstamos.
Atributo
clave.
Claves
foráneas.
Hay que añadir a la entidad préstamos los atributos DNI y código de libro, debido a las reglas de claves foráneas de las
relaciones 1 a
Muchas (recuerde que hay que pasar el atributo clave desde la parte 1 a la parte Muchas en estas
relaciones).
Otros
atributos interesantes.
Se puede añadir a esta entidad atributos como fecha
de préstamo, fecha de devolución para controlar aún mejor la información de
cada préstamo en concreto.
Por lo tanto, la entidad Préstamos del ejemplo
quedará con los siguientes atributos:
Préstamos
Número
(atributo clave)
Fecha
préstamo
Fecha
devolución
DNI
(clave foránea de alumnos)
Código
Libro (clave foránea de libros)
- Después de haber resuelto las dos relaciones
problemáticas Muchas a Muchas, el Modelo Entidad Relación resultante será
el siguiente (subrayados con línea continua los atributos clave,
subrayados con líneas punteadas los atributos claves foráneas):
Se puede observar que ya no hay relaciones Muchas a
Muchas, y que han aparecido dos nuevas entidades que no estaban contempladas en
un principio en el enunciado.
CONCLUSIONES:
Al
realizar el diseño de una Base de Datos pueden aparecer relaciones Muchas a
Muchas.
Las
Relaciones Muchas a Muchas están prohibidas ya que pueden causar muchos
problemas.
Una
relación Muchas a Muchas aparece debido a que hay una entidad intermedia que no
ha sido identificada.
Al
añadir la entidad intermedia, desaparece la relación Muchas a Muchas y aparecen
dos relaciones 1 a
Muchas, solucionándose el problema.
Será
necesario añadir a la nueva entidad su atributo clave y las claves foráneas
debidas a las relaciones 1 a
Muchas.
También
puede ser interesante añadir a la nueva entidad atributos que aporten más
información a la base de datos.
No hay comentarios.:
Publicar un comentario