Tu portal de
formación online
United States

Infórmate

Curso de Access 2007 Desarrollo de Aplicaciones

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:

  • El campo que relaciona ambas tablas tiene que ser en la tabla principal un campo clave (indexado si y sin duplicados) y en la otra tabla, también indexado (con o sin duplicados según proceda).

  • Los campos relacionados tienen el mismo tipo de datos, a excepción de que la relación se establezca entre un campo de tipo Autonumérico y un campo de tipo Numérico, siempre y cuando este último sea un Entero largo (por lo tanto los dos campos con la misma longitud: entero largo). No se pueden relacionar un campo de texto con uno de fecha, uno numérico con uno de texto...

  • Ambas tablas deben pertenecer a la misma base de datos de Access (estar dentro del mismo archivo .accdb).



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:

  • No podemos introducir un valor para ese campo en la tabla relacionada si antes no ha sido introducido en la tabla principal, es decir, no podemos tener en la tabla de pedidos un pedido realizado por un código de cliente que no exista.

Otro ejemplo: no podemos tener o anotar en la tabla de participantes un participante con un número de socio que no exista en la tabla relacionada de socios (habría que dar de alta al participante previamente en la tabla socios. Una buena opción sería colocar en el formulario de inscripciones un botón de comando que nos "lleve" y abra el formulario de socios para poderle dar de alta. Al cerrar el formulario de socios una vez dado de alta, regresaríamos al formulario de inscripciones y como ese nuevo socio ya existe en la tabla de socios, nos permitiría su entrada).

No podremos introducir tampoco a un empleado un código de entidad bancaria si no se ha introducido esa entidad previamente en la tabla entidades. No se puede asignar a un trabajador un código de categoría si esa categoría no está dada de alta en la tabla categorías. No se puede añadir un pedido en una tabla de pedidos de un artículo si el artículo no existe previamente en la tabla de artículos...

  • No se puede eliminar un registro de una tabla principal si existen registros coincidentes en la tabla relacionada, no podemos eliminar un cliente que está en la tabla de pedidos, es decir está realizando un pedido.

Otro ejemplo: No podemos eliminar un socio que está en la tabla de participaciones. No podremos eliminar una entidad bancaria mientras existe un empleado que domicilie su nómina por ella, no podremos eliminar una categoría profesional de la empresa mientras algún empleado la tenga asignada. No se podría borrar un artículo mientras existen pedidos de ese artículo en la tabla de pedidos. no se podría dar de baja un vehículo (de una base de datos de un ayuntamiento) mientras en la tabla relacionada multas existan multas sobre ese vehículo...

  • No se puede cambiar un valor de clave principal en la tabla principal si el registro tiene registros relacionados, siguiendo el ejemplo, no podríamos cambiar el número de cliente en la tabla de clientes si este cliente en este momento esta realizando un pedido, es decir está en la tabla pedidos.

Otro ejemplo: No podríamos cambiar el número de socio en la tabla de socios si este socio en este momento esta participando en un torneo, es decir está en la tabla participaciones. Para el resto de ejemplos propuestos, exactamente igual.

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 (con casilla de opción) que aparecen debajo:

  • Actualizar en cascada los campos relacionados: si se activa esta opción, al modificar el valor del campo común a ambas tablas en un registro de la tabla principal, se actualizará dicho valor en todos los registros relacionados en la tabla relacionada. (Si cambiamos el número de cliente en la tabla clientes, de forma automática se cambia en todos los registros de la tabla pedidos).

  • Eliminar en cascada los registros relacionados: si se activa esta opción, al borrar un registro de la tabla principal, se borrarán todos los registros dependientes en la tabla relacionada. (Si se elimina un cliente en la tabla clientes se eliminan de forma automática todos los registros que tengan que ver con ese cliente en la tabla pedidos). Esta opción es muy peligrosa ya que en Access una vez que se elimina un registro ya no se puede volver a recuperar.

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).

Modificar y eliminar relaciones. Integridad referencial.

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


Si desea obtener un acceso sin restricciones a los contenidos del curso de Access 2007 Desarrollo de Aplicaciones y disfrutar de todas las herramientas del aula virtual (Videos explicativos streaming, acceso a los foros, chat, ejercicios resueltos, la ayuda del tutor, audioconferencia, estudio de grabación, test y actividades de autoevaluación, etc...) puede inscribirse completamente gratis y comenzar a realizar de forma inmediata el curso.