Muchos a muchos

Resumiendo lo visto hasta ahora podemos decir que el tipo de relación ideal es uno a muchos o muchos a uno. Las relaciones uno a uno no aportan demasiado a la base de datos, simplemente nos ayudan a tener mejor organizada la información pero poco más. Veamos qué ocurre con las relaciones muchos a muchos.

Por ejemplo, si queremos conocer los profesores que dan clase a un grupo o los grupos a los que da clase un profesor determinado, necesitamos en principio dos tablas: Profesores y Grupos. ¿Y cuál sería la relación entre estas dos tablas? Pues bien, para establecerla podríamos leer que un profesor da clases a varios grupos (1A, 1B, 2C, etcétera) y un grupo recibe clases de varios profesores (Carlos Pérez, Antonio García, etcétera). Por lo tanto, nos encontramos entre una relación MUCHOS A MUCHOS.

Desde un punto de vista teórico diríamos que en las relaciones Muchos a muchos a cada registro de la tabla A se le pueden asociar varios registros de la tabla B y cada registro de la tabla B puede estar relacionado con más de un registro de la tabla A.

Otros ejemplos para ilustrar este modelo de relación podrían ser:

  • Los alumnos que participan en las actividades deportivas del centro. Concretamente un alumno podría participar en más de un deporte (Fútbol, Baloncesto, etcétera) y a su vez cada equipo está formado por varios componentes. Esta relación también sería del tipo Muchos a muchos.
  • Con las actividades extraescolares ocurre lo mismo. Un alumno puede asistir a más de una (manualidades, música, idiomas, etcétera) y en cada una de ellas, encontraremos a varios alumnos.

Problemas y solución para las relaciones Muchos a muchos

Las relaciones Muchos a muchos no son recomendables y debemos tratar de evitarlas utilizando TABLAS INTERMEDIAS en las que se utilizarían relaciones de uno a muchos. Una tarea sencilla como podría ser obtener un listado de todos los profesores que imparten clases en 1ºB se convierte en una verdadera pesadilla si mantenemos esta relación. La solución pasa por crear una TABLA INTERMEDIA que nos permita dividir la relación MUCHOS A MUCHOS en dos relaciones UNO A MUCHOS como puedes ver en la figura 2.34.

Figura 2.34 

Icono IDevice

Importante

En documentación relacionada con bases de datos también podrás encontrar que utilizan otra terminología para identificar las relaciones, concretamente es común utilizar: uno a varios, varios a uno, varios a varios, etcétera.
Icono IDevice

Actividad 8

La base de datos utilizada como ejemplo contiene diferentes tablas pero faltarían dos tablas intermedias importantes, concretamente se trata de las tablas Participantes y ProfesoresCursos.

Tabla Participantes

En la tabla “Participantes” necesitamos utilizar los tres campos disponibles para componer la clave única. Además, teniendo en cuenta que esta tabla es una de las más importantes de nuestro ejemplo estudiemos mejor el sentido de cada uno de sus campos:

  • Alumno: Hace referencia al código de expediente del alumno. Con este dato obtendremos después el resto de información necesaria para identificar al alumno.
  • ParticipanteEquipo: Código del equipo del que forma parte el alumno. Por ejemplo, el equipo “LocosDelBalón” tiene asociado el código 0, pues bien, este será el dato que necesitamos para completar esta tabla.
  • ParticipanteActividad: De nuevo utilizamos un código, pero esta vez corresponde a la actividad en la que participa el equipo: “Fútbol”, “Baloncesto”…
Es importante recordar que para poder introducir datos en la tabla Participantes es necesario crear previamente las tablas implicadas: Alumnos, Equipos y Actividades.

A continuación crea esta tabla teniendo en cuenta los siguientes datos:

Nombre del campo

Tipo de dato

Propiedades

Descripción

Alumno

Integer [INTEGER]

Por defecto

Código de alumno. (CAMPO CLAVE)

ParticipanteEquipo

Integer [INTEGER]

Por defecto

Código del equipo. (CAMPO CLAVE)

ParticipanteActividad

Integer [INTEGER]

Por defecto

Código de la actividad. (CAMPO CLAVE)

Tabla ProfesoresCursos

La tabla ProfesoresCursos nos permitirá identificar de forma precisa los grupos (cursos) a los que imparte clase cada profesor. Además con el campo Tutor sabremos qué curso está directamente tutelado por el profesor. Para completar esta actividad diseña la tabla ProfesoresCursos a partir de la siguiente información.

Nombre del campo

Tipo de dato

Propiedades

Descripción

Profesor

Integer [INTEGER]

Por defecto

Código del profesor. (CAMPO CLAVE)

Curso

Integer [INTEGER]

Por defecto

Código del curso asociado al profesor (1B, 1C, 2A...). (CAMPO CLAVE)

Tutor

Sí/No [BOOLEAN]

Valor predeterminado, configurar a “No”.

Si es tutor del curso el campo estará a “Sí”.