20.11.08

Tipos de relaciones

EJEMPLO PRACTICO DE RELACIONES

--------------------------------------------------------------------------------

1 - EJEMPLO DE UNO A UNO:

Primer paso: en la pantalla de relaciones agregamos las dos tablas que vamos a relacionar (puedes descargar la base de datos empleado-tablas.mdb, la cual contiene las tablas sin relaciones que puedes ver en la imagen de abajo) . Los dos campos a relacionar son N_EMPLE que aparecen en negrita ya que son clave principal...




Segundo paso: arrastramos N_EMPLE de EMPLEADO_PERSONAL hacia N_EMPLE de EMPLEADO_LABORAL. Aparecerá un pequeño cursor que colocamos encima del campo de destino y soltamos...

Es importante el sentido del arrastre: en toda relación hay siempre una tabla principal y una tabla relacionada (incluso en la relación uno uno). La tabla principal se sitúa en la parte 1 y es la que arrastramos. La tabla relacionada se sitúa en el lado muchos (o el segundo lado 1 en una relación uno a uno) y es donde soltamos el cursor.




Tercer paso: al soltar el cursor en el campo destino, aparece automáticamente la pantalla "modificar relaciones". En la parte superior izquierda aparece el título " Tabla o consulta ", debajo el nombre de la tabla o consulta principal y más abajo el campo (o campos) de relación. En la parte superior centro aparece el título "Tabla o consulta relacionada" que indica tabla y campo relacionado... El botón "Exigir integridad referencial" debe activarse. Con ello Access controlará la coherecia de los datos que existan o introduzcamos en las tablas. En la parte inferior Access indicará automáticamente el tipo de relación que se va a crear.




Una tabla principal (con integridad referencial) tendrá un comportamiento distinto a una tabla relacionada. En nuestro ejemplo EMPLEADO_PERSONAL es la tabla principal, EMPLEADO_LABORAL es la tabla relacionada. Podemos insertar nuevos registros (altas) en EMPLEADO_PERSONAL sin que existan registros relacionados en EMPLEADO_LABORAL. Pero no podemos insertar ningún registro en EMPLEADO_LABORAL si no existe un registro en EMPLEADO_PERSONAL con el que se pueda relacionar. La lógica es la siguiente: puedo insertar los datos personales de un nuevo empleado sin que todavía tenga asignado SALARIO, DEPART, etc. Pero no puedo insertar datos como SALARIO, DEPART, etc de un empleado que tadavía no existe...


Cuarto paso: queda pulsar el botón Crear del paso anterior. Si todo fué correcto la relación se habrá establecido como muestra la imagen siguiente...


--------------------------------------------------------------------------------

2 - EJEMPLO DE UNO A VARIOS:

Para crear una relación de uno a varios se procede de la misma manera. Supongamos que tenemos la tabla DEPARTAMENTO que contiene los nombre de los departamentos de la empresa. El campo COD es un código arbitrario (texto o numérico) que es clave principal, puesto que no hay dos departamentos con el mismo código. El campo Departamento puede ser una descripción del departamento. La relación se establece entre COD y DEPART. La tabla principal es DEPARTAMENTO y tendrá el lado 1. La relacionada es EMPLEADO_LABORAL y tendrá el lado muchos (símbolo de infinito)...
Insertamos la tabla DEPARTAMENTO


Arrastramos COD sobre DEPART


Activamos integridad referencial


Resultado de la relación

--------------------------------------------------------------------------------

3 - INDEFINIDA o INDETERMINADA:

Este tipo de relación aparece cuando no hay coherencia de tipos de datos. Access no puede determinar el tipo de relación que existe entre las tablas. Los datos relacionados de esta manera normalmente son incoherentes y por tanto debe evitarse...

16.11.08

Integridad referencial

La INTEGRIDAD REFERENCIAL es un sistema de reglas que utiliza Microsoft Access para garantizar que las relaciones entre los registros de tablas relacionadas son válidas y que no se eliminan ni modifican accidentalmente datos relacionados. Puede establecer la integridad referencial cuando se cumplen todas las condiciones siguientes:

* El campo coincidente de la tabla principal es una clave principal o tiene un índice único.

* Los campos relacionados tienen el mismo tipo y tamaño de datos. Hay dos excepciones. Un campo Autonumérico puede estar relacionado con un campo Numérico con la propiedad TamañoDelCampo (FieldSize) establecida en Entero Largo, y un campo Autonumérico con la propiedad TamañoDelCampo (FieldSize) establecida en Id. de réplica puede estar relacionado con un campo Numérico con la propiedad TamañoDelCampo (FieldSize) establecida en Id. de réplica.

* Ambas tablas pertenecen a la misma base de datos de Microsoft Access. Si las tablas son tablas vinculadas, deben ser tablas en el formato de Microsoft Access y debe abrir la base de datos en la que están almacenadas para poder establecer la integridad referencial. La integridad referencial no puede exigirse para tablas vinculadas procedentes de bases de datos en otros formatos.

Cuando se utiliza la integridad referencial, se aplican las siguientes reglas:

* No puede introducir un valor en el campo de clave externa de la tabla relacionada que no exista en la clave principal de la tabla principal. No obstante, puede introducir un valor Nulo en la clave externa, especificando que los registros no están relacionados. Por ejemplo, no puede tener un pedido asignado a un cliente que no existe, pero puede tener un pedido asignado a nadie mediante la introducción de un valor Nulo en el campo Id. de cliente.

* No puede eliminar un registro de una tabla principal si existen registros coincidentes en una tabla relacionada. Por ejemplo, no puede eliminar un registro de empleados de la tabla Empleados si existen pedidos asignados al empleado en la tabla Pedidos.

* No puede cambiar un valor de clave principal en la tabla principal si ese registro tiene registros relacionados. Por ejemplo, no puede cambiar el Id. de un empleado en la tabla Empleados si existen pedidos asignados a ese empleado en la tabla Pedidos.

Actualizaciones y eliminaciones en cascada:

Para las relaciones en las que se exige la integridad referencial, puede especificar si desea que Microsoft Access actualice en cascada y elimine en cascada automáticamente los registros relacionados. Si establece estas opciones, las operaciones de eliminación y actualización que normalmente impediría la integridad referencial se permiten ahora. Al eliminar registros o al cambiar los valores de clave principal de una tabla principal, Microsoft Access realiza los cambios necesarios en las tablas relacionadas con el fin de conservar la integridad referencial.

SI activa la casilla de verificación Actualizar en cascada los campos relacionados al definir una relación, siempre que cambie la clave principal de un registro de la tabla principal, Microsoft Access actualizará automáticamente la clave principal con el nuevo valor en todos los registros relacionados. Por ejemplo, si cambia un Id. de cliente en la tabla Clientes, el campo Id. de cliente de la tabla Pedidos se actualizará automáticamente en cada uno de los pedidos de ese cliente, de modo que la relación no se rompa. Microsoft Access actualiza en cascada sin mostrar ningún mensaje.

Nota Si la clave principal de la tabla principal es un campo Autonumérico, la activación de la casilla de verificación Actualizar en cascada los campos relacionados no tendrá ningún efecto, porque no se puede cambiar el valor de un campo Autonumérico.

Si selecciona la casilla de verificación Eliminar en cascada los registros relacionados al definir una relación, siempre que elimine registros de la tabla principal, Microsoft Access eliminará automáticamente los registros relacionados de la tabla relacionada. Por ejemplo, si elimina el registro de un cliente de la tabla Clientes, todos los pedidos del cliente se eliminarán automáticamente de la tabla Pedidos (esto incluye los registros de la tabla Detalles de pedidos relacionados con los registros de Pedidos). Al eliminar registros de un formulario u hoja de datos con la casilla de verificación Eliminar en cascada los registros relacionados activada, Microsoft Access le avisa que es posible que también se eliminen los registros relacionados. No obstante, al eliminar registros mediante una consulta de eliminación, Microsoft Access elimina automáticamente los registros de las tablas relacionadas sin mostrar un aviso.