viernes, 5 de agosto de 2016

039.- Base De Datos - Relaciones Muchas A Muchas - Java y NetBeans

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

  1. Entidades participantes:
Estudiando el supuesto anterior, se ve claro que existen tres entidades claras: alumnos, cursos y libros.

  1. 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



  1. 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.


  1. 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:



  1. 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.


  1. 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.


  1. 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”.


  1. 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:




  1. 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.


  1. 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)



  1. 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:



  1. 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í:



  1. 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”.


  1. 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.
Se puede asignar un número de préstamo a cada préstamo para distinguirlos entre sí.

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)


  1. 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