Relacionar tablas

Tipos de relaciones

De lo comentado, se deduce que la relación entre dos tablas es única y se establece siempre a través de un campo común a ambas. No es necesario que el campo tenga el mismo nombre pero si es aconsejable acostumbrarse a nombrar los campos comunes del mismo modo, para evitar posibles equivocaciones a la hora de crear las relaciones.

Cuando se establece una relación entre tablas, una de ellas actuará como tabla principal y la otra como tabla relacionada.

Si entre dos tablas existe una relación y se crea otra, ésta sustituirá a la anterior, ya que no puede existir más de una relación entre dos tablas. Sin embargo, una tabla sí puede tener relaciones con más de una tabla, siempre y cuando sea con tablas distintas.

Access permite establecer tres tipos diferentes de relaciones entre dos tablas, y cada una de ellas tiene unas características que condicionarán el comportamiento final de la base de datos. Por ello, debe seleccionarse correctamente el tipo de relación entre las tablas para obtener el resultado esperado.

Los tres tipos de relaciones que existen son:

Ventana de relaciones

Las relaciones se establecen y modifican desde la ventana de relaciones, a la cual se accede, cuando está activa la ventana de la base de datos, seleccionando la opción Relaciones del menú Herramientas, o haciendo clic sobre el botón Relaciones de la barra de herramientas.

Cuando se accede por primera vez a la ventana de relaciones, ésta aparece vacía:

Sobre la misma aparecerá el cuadro de diálogo que muestra la siguiente figura, desde el cual se pueden agregar las tablas que se van a relacionar entre sí. Los pasos a seguir son:

  1. En la ficha Tablas, seleccionar las tablas a relacionar (manteniendo la tecla Ctrl pulsada hacer clic sobre ellas) y a continuación hacer clic sobre el botón Agregar.
  2. Una vez seleccionadas las tablas, hacer clic en el botón Cerrar para abandonar el cuadro de diálogo. En la ventana de relaciones aparecerán las tablas que se han agregado.

Es posible añadir nuevas tablas con las que crear nuevas relaciones en cualquier momento. El procedimiento a seguir en este caso es el que se expone a continuación:

  1. Acceder a la ventana de relaciones seleccionando la opción Relaciones del menú Herramientas, o haciendo clic sobre el botón Relaciones de la barra de herramientas.
  2. Seleccionar la opción Mostrar tabla del menú Relaciones o hacer clic sobre el botón Mostrar tablas de la barra de herramientas. El cuadro de diálogo que se presenta es Mostrar tabla (el mismo visto anteriormente).
  3. En la ficha Tablas seleccionar y agregar aquellas que se precisen.
  4. Hacer clic sobre el botón Cerrar, para abandonar el cuadro de diálogo.

Para eliminar tablas de la ventana de relaciones, basta con pulsar sobre la tabla que se quiere eliminar y pulsar la tecla Supr.

Al cerrar la ventana de relaciones, si en ella se ha realizado alguna modificación, se visualizará un mensaje de advertencia como el que muestra la figura siguiente, permitiendo guardar los cambios realizados o, por el contrario, salir sin guardar los mismos.

Creación de relaciones entre tablas

 

Establecer una relación. Otro ejemplo

Establecer una relación entre dos tablas

Las relaciones entre tablas se establecen en la ventana de relaciones, siendo el procedimiento el siguiente:

  1. Situar el puntero del ratón sobre el campo común a ambas de la tabla principal.
  2. Pulsar el botón izquierdo del ratón y, sin soltarlo, arrastrar el campo hasta el campo común de la tabla relacionada.

     
  3. Soltar el botón del ratón. Aparecerá el cuadro de diálogo que muestra la figura siguiente:
  4. Hacer clic sobre el botón Crear para establecer la relación. En la ventana de relaciones aparecerán ambas tablas unidas a través de un línea, cuyos extremos se sitúan frente a los campos de unión y en ellos se muestra el tipo de relación que hay entre las tablas.

De este modo hemos establecido una relación entre la tabla de clientes y la de pedidos, al realizar la relación de está manera no establecemos ninguna seguridad, es decir, siguiendo con el ejemplo, tal y como hemos hecho esta relación, podríamos tener un pedido realizado por un cliente que no tuviéramos registrado en la tabla de clientes, es decir, un cliente cuyo nombre, compañía .... no lo conociéramos. Para evitar estos errores existe la integridad referencial, la cual estudiaremos a continuación.

Modificar y eliminar relaciones

Una vez establecidas las relaciones entre las distintas tablas, es posible modificar las mismas o incluso eliminarlas. Ambas operaciones se realizan desde la Ventana de relaciones, como ya se ha comentado anteriormente.

Para modificar una relación los pasos a seguir son:

  1. Hacer clic sobre la línea de la relación que se quiere modificar, ésta se visualizará con un trazo más grueso, indicando que está seleccionada.
  2. Seleccionar la opción Modificar relación del menú Relaciones. Se muestra el mismo cuadro de diálogo que aparecía al crear la relación.
  3. Realizar las modificaciones necesarias.
  4. Hacer clic sobre el botón Aceptar.

Para eliminar una relación, basta con seleccionar la relación que se quiere eliminar y pulsar a continuación la tecla Supr (o seleccionar la opción Eliminar del menú Edición).

Integridad referencial

La integridad referencial es un conjunto de reglas de Access que garantizan que las relaciones entre los registros de tablas relacionadas son válidas y que no se eliminan ni modifican accidentalmente datos relacionados que satisfacen dicha relación. Sirve para aumentar la seguridad en el tratamiento de los datos que coexisten entre dos tablas relacionadas.

Se puede establecer integridad referencial cuando se cumplen todas las condiciones siguientes:

Establecer integridad referencial

Establecer integridad referencial

Cuando se establece la integridad referencial (marcando la casilla pertinente en el panel de modificar relaciones) se van a cumplir obligatoriamente, las siguientes reglas:

Si se quiere exigir el cumplimiento de estas reglas, hay que seleccionar la casilla de verificación Exigir integridad referencial al crear la relación (paso 3).

Al hacerlo se activarán las dos opciones que aparecen debajo:

Muy Importante:  Esta opción es muy arriesgada ya que en Access una vez que se elimina un registro ya no se puede volver a recuperar. Es fundamental llevar una buena política de copias de seguridad.

Al establecer la integridad referencial en la figura siguiente se observa que la relación es uno (1) a varios (¥), un cliente (cuyos datos se encuentran en la tabla Clientes) puede haber realizado varios pedidos (los datos de éstos se encuentran en la tabla Pedidos).

Creación de todas las relaciones y guardar el modelo relacional

 

Modificar y eliminar relaciones. Integridad referencial

Consultas de varias tablas

En Access, es posible realizar consultas involucrando campos de varias tablas, de modo que el resultado de la consulta muestre información procedente de todas ellas. Para que una consulta pueda realizarse sobre campos de varias tablas, éstas deben tener un campo común, y las tablas deberán estar relacionadas por esos campos. Si no se hubieran establecido las relaciones anteriormente, habría que establecerlas en este momento (en la propia consulta), ya que si no existen relaciones entre las tablas, Access no encontrará relación entre los campos especificados en la ventana de diseño y no mostrará ningún registro como resultado de la consulta.

Una vez establecidas las relaciones entre las tablas el modo de generar una consulta de varias tablas es similar a la de creación de cualquier otra consulta, sin más que "subir" a la parte superior de la consulta las tablas necesarias (varias en lugar de una sola), y "bajar" los campos a incluir en la consulta desde cada correspondiente tabla en la que se encuentren.

Crear una consulta con varias tablas (relacionadas)

Mas ejemplos de tablas relacionadas

Ejemplo-1: Supongamos que en la federación de golf (siguiendo con el ejemplo de la base de datos Socios del Club) se ha asignado un responsable tutor por cada uno de los niveles de juego de forma que a cada jugador le pasa a corresponder un responsable deportivo en virtud de si su nivel de juego es principiante, medio o senior. Dicho tutor, tiene unos datos que lo identifican, tales como son su nombre, apellidos, teléfono de contacto, fax, dirección de e-mail, dirección de oficina...Sería preciso que en el registro de cada socio se dispusiera de toda la información de su tutor o responsable deportivo.

Tras un análisis de la nueva situación, se deduce que si en la tabla socios agregamos tantos campos como para albergar la información de dichos tutores, a todos los socios con el mismo nivel de juego, les va a corresponder el mismo tutor, con lo que todos los datos del tutor estarían repetidos de forma masiva y redundante en la tabla socios (ocupando mucho espacio y lentificando el proceso básicamente). Quizás la mejor solución sea, en este caso, definir otra tabla llamada Tutores, en la que deberá existir un registro para cada nivel de juego y por lo tanto para cada tutor. La estructura de la tabla sería la siguiente:

Se introducirán los datos de los niveles junto a sus responsables...

Pero, ¿De que manera podríamos enlazar o relacionar esta nueva tabla de tutores con la gran tabla de socios?

Será necesario relacionar el nivel de juego de cada socio de la tabla de socios con en codigo de nivel de la tabla de tutores. Pero como son de distinto tipo (texto -en socios- frente a numérico -en tutores-) no se podrá. La solución es sustituir en la tabla de socios el campo nivel por el campo codnivel (por ejemplo) de tipo  numérico y luego colocar a cada socio un código (el que corresponde a su nivel de juego) en este campo de acuerdo a los niveles y tutores introducidos en la tabla de tutores (1, 2 o 3).

1.- Se deberá crear en la tabla de socios el campo codnivel.

2.- Mediante tres consultas de actualización, a aquellos que tengan nivel de juego principiante, actualizaremos ese nuevo campo codnivel (de la tabla de socios) a 1. De igual manera, los socios con nivel senior actualizaremos a 2 su campo codnivel. Y a 3 el campo codnivel de los socios con nivel senior.

3.- A continuación deberemos (de forma recomendada, aunque en este ejemplo no lo borremos) eliminar el campo nivel de la tabla socios ya que, a partir de ahora, se conocerá el nivel de juego gracias a un código en la tabla de socios, que se corresponderá con uno de los niveles y tutores de la tabla tutores.

4.- Ahora tendremos que establecer la relación (en la pantalla de relaciones) de acuerdo a la siguiente pantalla:

A partir de este momento, podríamos crear consultas, formularios e informes en donde aparecen ambas tablas implicadas, eso si, previamente relacionadas.

Otro ejemplo de tablas relacionadas

Ejemplo-2: Supongamos un ejemplo superficial de gestión de sanciones de tráfico en una localidad. Existen diferentes tipos de sanción (tipos de multa), diferentes guardias o agentes, los vehículos, los cuales pertenecen a un ciudadano o propietario, y... por supuesto sanciones. Las sanciones las "pone" un agente a un vehículo, un determinado día, a una hora, en un lugar, y esa infracción es de un determinado tipo de entre las que se pueden sancionar. Un ciudadano puede tener mas de un vehículo.

La información habrá que disgregarla en diferentes tablas, (la de vehículos se supone que la facilita tráfico con todos los vehículos), que deberán estar... Relacionadas. La siguiente imagen muestra un posible planteamiento.

Relaciones base de datos multas