lunes, 9 de noviembre de 2009

Relación de varios a varios

Vamos a seguir trabajando el tema de las relaciones entre tablas. Después de ver las relaciones uno a varios y uno a uno, ahora toca ver la relación varios a varios. En este tipo de relación un registro o fila de una tabla puede estar relacionado con varios registros o filas de la segunda tabla. Por el otro lado, un registro de la segunda tabla puede estar relacionado con una o varias filas de la primera tabla.


Con esta entrada vamos a ver el proceso de construcción de una relación de varios a varios entre dos tablas. Hemos construido una base de datos llamada atletismo. Creamos dos tablas, una a la que denominamos Pruebas. Esta es su vista diseño:




La otra tabla, Atletas, contiene los datos de los atletas que compiten en las distintas pruebas:





Para poder establecer la relación entre ambas tablas, Access necesita otra tabla. Servirá para poder establecer una relación de varios a varios. La tabla intermedia para este caso la llamaremos Marcas, donde guardaremos los tiempos, distancias, saltos obtenidos en las distintas pruebas por los atletas:






En esta tabla, como vemos, hemos llevado una copia de las claves principales de las tablas pruebas y atletas. Su clave principal va a estar formada por tres campos: IdAtleta, IdPrueba y fecha. Se ha incluido fecha como parte de la clave principal, para tener en cuenta que cada atleta pueda participar en una prueba varias veces por existir series clasificatorias. Recordando, para establecer una clave principal compuesta por varios campos, es preciso seleccionar previamente esos campos y después haremos clic sobre el botón clave principal.

Ahora que tenemos las tablas necesarias vamos a construir la relación. Abrimos la ventana de relaciones, también se abre la ventana mostrar tabla. En la misma seleccionamos las tablas con las que vamos a construir la relación:

Seleccionamos las tres tablas con la tecla de control pulsada, pulsamos en agregar y cerramos esta ventana. El resultado es que la ventana Relaciones contiene las tres tablas.
A continuación, creamos las relaciones. En primer lugar, con el ratón arrastraremos el campo IdPrueba, de la tabla Pruebas, al campo IdPrueba de la tabla Marcas. Se abre la ventana Modificar las relaciones donde se observan las propiedades de la relación recién creada, como se observa en la siguiente imagen. En la misma, marcamos las propiedades de integridad referencial para evitar pérdidas accidentales de datos. Al final de la ventana vemos que esta relación de uno a varios. La razón es que una prueba puede estar relacionado con varios atletas con sus correspondientes marcas.




Repetimos este proceso entre las tablas Atletas y Marcas. Llevaremos el campo IdAtletas, de la tabla Atletas, a su copia, IdAtleta de la tabla Marcas. De esta forma queda creada otra relación de uno a varios entre Atletas y Marcas. Las propiedades de esta relación quedan visibles en la siguiente imagen:

Pulsando en el botón Crear la ventana se cierra quedando visibles las relaciones. El conjunto de las dos relaciones forman una relación de varios a varios entre las tablas Pruebas y Atletas. La siguiente imagen muestra las relaciones establecidas:



Es sencillo reconocer una tabla intermedia que permita construir una relación de varios a varios, si en la ventana Relaciones observamos una tabla cuya clave principal esté formada por varios campos, nos dará la pista de que es una tabla intermedia que forma parte de una relación de varios a varios.

Conclusión

En definitiva, para construir esta relación necesitamos una tabla adicional, Marcas, y crear dos relaciones. Las relaciones se crean entre una clave principal y su copia de la otra tabla, siendo esta la clave secundaria. El conjunto de los campos IdAtleta, IdPrueba y Fecha constituyen la clave principal de la tabla intermedia Marcas.

9 comentarios:

  1. Muy claro y explicativo, me ha ayudado un montón en mi proyecto tras buscar y no encontrar nada. Felicidades.

    ResponderEliminar
  2. Ya era hora de que alguien clarificara con un simple pero gran ejemplo el tema de las relaciones varios a varios. Enhorabuena y gracias.

    ResponderEliminar
  3. Respuestas
    1. Es tu hermano? jajajajaja...........

      Eliminar
    2. hola soy yo..... comentando aqui con Tasnia

      Eliminar
    3. que significa exente hermano?=3

      Eliminar