La integridad referencial en las bases de datos es un concepto fundamental para garantizar la consistencia y precisión de los datos. En este artículo, exploraremos en detalle qué es la integridad referencial, cómo se implementa y por qué es crucial para mantener la integridad de los datos. Aprende cómo establecer relaciones entre tablas, aplicar restricciones y asegurarte de que tus datos estén siempre íntegros. Descubre todo lo que necesitas saber sobre la integridad referencial en las bases de datos.
La integridad referencial es un sistema de reglas que utilizan la mayoría de las bases de datos relacionales para asegurarse que los registros de tablas relacionadas son válidos y que no se borren o cambien datos relacionados de forma accidental produciendo errores de integridad.
La integridad referencial es un principio de diseño de bases de datos que garantiza que las relaciones entre tablas en una base de datos se mantengan consistentes y precisas. En otras palabras, la integridad referencial asegura que los datos almacenados en una tabla estén relacionados de manera coherente con los datos almacenados en otras tablas de la base de datos.
Para lograr la integridad referencial, se utilizan restricciones de clave foránea, que establecen una relación entre dos tablas y garantizan que los datos que se almacenan en una tabla también se almacenan en otra tabla relacionada. Cuando se define una restricción de clave foránea, se especifica qué columna o conjunto de columnas en una tabla son claves foráneas, y se establece una relación entre esa tabla y otra tabla relacionada mediante la especificación de una clave primaria correspondiente en la tabla relacionada.
Por ejemplo, supongamos que tiene dos tablas en su base de datos: “Ordenes” y “Clientes”. Para establecer la integridad referencial entre estas dos tablas, puede definir una restricción de clave foránea en la tabla “Ordenes” que especifica que la columna “id_cliente” en la tabla “Ordenes” corresponde a la clave primaria “id_cliente” en la tabla “Clientes”. De esta manera, cualquier vez que se inserta, actualiza o elimina un registro en la tabla “Ordenes”, se verifica automáticamente si ese registro está relacionado con un registro existente en la tabla “Clientes”.
Integridad referencial en base de datos
La integridad referencial es una funcionalidad disponible en las bases de datos relacionales que garantiza la coherencia de datos entre relaciones aparejadas. Siempre se debería usar para garantizar la integridad de los datos.
Una clave foránea es un campo de una tabla que contiene una referencia a un registro de otra tabla.
Cuando se define una columna como clave foránea, las filas de la tabla pueden contener en esa columna un valor nulo o un valor que existe en la otra tabla. La integridad referencial consiste en que los datos que referencian a otros deben ser correctos.
Esta integridad referencial hace que el sistema gestor de la base de datos se asegure de que no hayan valores que no estén en la tabla principal.
La integridad referencial se activa en cuanto creamos una clave foránea. A partir de ese momento se comprueba cada vez que se modifiquen datos que puedan alterarla.
Se produciría un error cuando insertamos una nueva fila en la tabla secundaria y el valor de la clave foránea no existe en la tabla principal.
Tipos de relaciones
Entre dos tablas pueden existir dos tipos de relaciones:
- Uno a Uno
- Uno a Muchos
- Varios a Varios
Relación Uno a Uno
Cuando un registro de una tabla sólo puede estar relacionado con un único registro de la otra tabla y viceversa.
Relación Uno a muchos
Cuando un registro de una tabla (tabla secundaria) sólo puede estar relacionado con un único registro de la otra tabla (tabla principal) y un registro de la tabla principal puede tener más de un registro relacionado en la tabla secundaria, en este caso se suele hacer referencia a la tabla principal como tabla ‘padre’ y a la tabla secundaria como tabla ‘hijo’, entonces la regla se convierte en ‘un padre puede tener varios hijos pero un hijo solo tiene un padre.
Relación Varios a Varios
Cuando un registro de una tabla puede estar relacionado con más de un registro de la otra tabla y viceversa. En este caso las dos tablas no pueden estar relacionadas directamente, se tiene que añadir una tabla entre las dos que incluya los pares de valores relacionados entre sí.
Integridad referencial en cascada
Cuando queremos borrar una fila de la tabla principal y ese registro tiene ‘hijos’ tenemos dos alternativas: no dejar borrar el registro de la tabla principal o borrarlo y poner a valor nulo en todos sus ‘hijos’.
El actualizar y/o eliminar registros en cascada, son opciones que se definen cuando definimos la clave foránea y que le indican al sistema gestor qué hacer en los casos comentados en el punto anterior.
Actualizar registros en cascada
Esta opción le indica al sistema gestor de la base de datos que cuando se cambie un valor del campo clave de la tabla principal, automáticamente cambiará el valor de la clave foránea de los registros relacionados en la tabla secundaria.
Si no se tiene definida esta opción, no se puede cambiar los valores de la clave principal de la tabla principal.
Si intentamos cambiar el valor de una clave principal con hijos enotras tablas no se producirá el cambio y el sistema nos devolverá un error o un mensaje que los registros no se han podido modificar por infracciones de clave.
Eliminar registros en cascada
Esta opción le indica al sistema gestor de la base de datos que cuando se elimina un registro de la tabla principal automáticamente se borran también los registros relacionados en la tabla secundaria.
Si no se definine no se pueden borrar registros de la tabla principal si estos tienen registros relacionados en la tabla secundaria.
Si intentaramos borrar un registro no se producirá el borrado y el sistema nos devuelve un error o un mensaje que los registros no se han podido eliminar por infracciones de clave.
Como aplicar integridad referencial
La integridad referencial se define con el uso combinado de claves primarias (primary keys) ó claves candidatas (candidate key) y clave foráneas (foreign key).
Las claves primarias y candidatas están formadas por valores únicos y una clave foránea solamente puede estar asociada a una de estas para garantizar la existencia de un solo valor correcto.
Las claves candidatas se pueden definir creando un índice único (CREATE UNIQUE INDEX ….) en la columna pertinente.
Para poder usar esta funcionalidad es importante tener nuestra base de datos normalizada.
De este modo podremos evitar los siguientes problemas:
- Evitar la redundancia de los datos.
- Evitar problemas de actualización de los datos en las tablas.
- Proteger la integridad de los datos.
Nada mejor que un simple ejemplo para ver como podemos implementar la teoría con unos simples comandos.
Si tenemos dos tablas: Una de clientes, con dos atributos, un número identificador y un nombre. Otra tabla para facturas con el número de factura y el número de cliente.
Si no utilizáramos integridad referencial e intentáramos insertar un registro de factura a un cliente inexistente o queremos borrar un cliente que ya posee registros en facturas podríamos realizarlo sin ningún tipo de problema. El inconveniente es que nuestra base de datos no seria confiable por falta de consistencia de datos.
Esto se puede solucionar creando una clave primaria en el atributo ID de la tabla clientes y una clave foránea en el atributo CLIENTE de la tabla facturas.
Esto lo podemos hacer cuando definamos la tabla ó con los siguientes comandos para la clave primaria:
ALTER TABLE clientes ADD CONSTRAINT cliente_pk PRIMARY KEY (id);
Y para la foránea, por ejemplo:
ALTER TABLE facturas ADD CONSTRAINT clientes_id_fk FOREIGN KEY (cliente)
REFERENCES clientes(id) MATCH FULL ON DELETE RESTRICT ON UPDATE CASCADE;
Esto seria suficiente para implementar integridad referencial en las dos tablas de nuestro ejemplo. Si intentamos hacer algo ilegal con nuestros datos, la base de datos nos lo prohibirá y nos dará un error.
Hay tres parametros cuando definimos una clave foránea que son muy importantes y que definen como la base de datos se va a comportar para salvaguardar la integridad de nuestros datos. Estos parametros son:
MATCH tipo
ON DELETE accion
ON UPDATE accion
En donde tipo puede tener estos valores:
- FULL: No permite que una columna tenga el valor NULL en una clave foránea compuesta por varias columnas
- SIMPLE: Permite que una columna tenga el valor NULL en una clave foránea compuesta por varias columnas
Y accion puede tener estos valores:
- NO ACTION: Produce un error indicando que un DELETE ó UPDATE creará una violación de la clave foránea definida.
- RESTRICT: Produce un error indicando que un DELETE ó UPDATE creará una violación de la clave foránea definida.
- CASCADE: Borra ó actualiza automáticamente todas las referencias activas
- SET NULL: Define las referencias activas como NULL
- SET DEFAULT: Define las referencias activas como el valor por defecto (si está definido) de las mismas