Relaciones de muchos a muchos
Una relación de muchos a muchos se produce cuando varios registros de una tabla se asocian a varios registros de otra tabla. Por ejemplo, existe una relación de muchos a muchos entre los clientes y los productos: los clientes pueden comprar varios productos y los productos pueden ser comprados por muchos clientes.
Por lo general, los sistemas de bases de datos relacionales no permiten implementar una relación directa de muchos a muchos entre dos tablas. Tenga en cuenta el ejemplo de seguimiento de facturas. Si había muchas facturas con el mismo número de factura y uno de sus clientes preguntó acerca de ese número de factura, no sabría a qué número se refería. Este es el motivo por el que se debe asignar un valor exclusivo a cada factura.
Para evitar este problema, puede dividir la relación de muchos a muchos en dos relaciones de uno a muchos mediante el uso de una tercera tabla denominada tabla de unión. Cada registro de una tabla de unión incluye un campo de coincidencia que contiene el valor de las claves principales de las dos tablas que se unen. (En la tabla de unión, estos campos de coincidencia son claves externas). Estos campos de clave externa se rellenan con datos, ya que los registros de la tabla de unión se crean desde cualquiera de las tablas que se unen.
Un ejemplo típico de una relación de muchos a muchos es aquella entre los estudiantes y las clases. Un estudiante puede matricularse en muchas clases y una clase puede incluir muchos estudiantes.
En el siguiente ejemplo, se incluye una tabla Alumnos, que contiene un registro para cada estudiante, y una tabla Clases, que contiene un registro para cada clase. Una tabla de unión, Matrículas, crea una relación de uno a muchos, una entre cada una de las dos tablas.
La clave principal ID de estudiante identifica de forma exclusiva a cada estudiante de la tabla Alumnos. La clave principal ID de clase identifica de forma exclusiva cada clase de la tabla Clases. La tabla Matrículas contiene las claves externas ID de estudiante e ID de clase.
Para configurar una tabla de unión para una relación de muchos a muchos:
- Mediante el uso del ejemplo, anterior, cree una tabla denominada Matrículas. Esta será la tabla de unión.
- En la tabla Matrículas, cree un campo ID de estudiante y un campo ID de clase.
Por lo general, las tablas de unión contienen campos que no tienen sentido en otras tablas. Puede añadir campos a la tabla Matrículas, como un campo Fecha para mantener un registro de cuándo alguien inició una clase y un campo Coste para rastrear cuánto pagó un estudiante por realizar una clase.
- Cree una relación entre los dos campos ID de estudiante de las tablas. A continuación, cree una relación entre los dos campos ID de clase de las tablas.
Mediante este diseño, si un estudiante se matricula en tres clases, ese estudiante tendrá un registro en la tabla Alumnos y tres registros en la tabla Matrículas: un registro para cada clase en la que se ha matriculado el estudiante.
Notas
- Las tablas de unión pueden acceder a los campos y los datos entre tablas sin necesidad de crear una relación diferente. Por ejemplo, para visualizar una lista de todas las clases en las que se ha matriculado un estudiante, cree un portal en una presentación en función de la tabla Alumnos. Diseñe el portal para que muestre registros relacionados de la tabla Clases. A continuación, añada los campos adecuados de Clases al portal. A medida que se desplaza por los registros de la presentación Alumnos, el portal muestra todas las clases en las que se ha matriculado un estudiante específico.