La integridad referencial es una parte importante del diseño relacional. Asegura que las relaciones entre tablas sean coherentes, evitando registros huérfanos o inconsistentes.
En otras palabras, una llave foránea (FOREIGN KEY) se encarga de garantizar que cada registro relacionado tenga sentido dentro de la estructura de tu base de datos.
¿Qué es la integridad referencial?
La integridad referencial asegura que los valores de una columna (o conjunto de columnas) en una tabla secundaria (hijo) coincidan con valores existentes en una columna clave primaria (PRIMARY KEY) de otra tabla principal (padre).
Por ejemplo:
- Una tabla
empleadospuede hacer referencia a una tabladepartamentos. - Cada empleado pertenece a un departamento existente.
- Si intentas asignar un departamento que no existe, el motor SQL lo impedirá.
Llaves primarias y foráneas: el vínculo esencial
- PRIMARY KEY: identifica de forma única cada registro en una tabla.
- FOREIGN KEY: establece la relación entre tablas.
- Su valor debe existir previamente en la tabla de referencia.
- Protege la consistencia de los datos.
Ejemplo práctico (PostgreSQL)
Primero, definamos dos tablas que se relacionan: departamentos y empleados.
CREATE TABLE departamentos (
id_departamento SERIAL PRIMARY KEY,
nombre VARCHAR(50) NOT NULL
);
CREATE TABLE empleados (
id_empleado SERIAL PRIMARY KEY,
nombre VARCHAR(50) NOT NULL,
id_departamento INT,
FOREIGN KEY (id_departamento)
REFERENCES departamentos (id_departamento)
ON UPDATE CASCADE
ON DELETE SET NULL
); 📘 Explicación:
- Si se elimina un departamento, los empleados de ese departamento quedarán con
NULLen su campoid_departamento. - Si hay un cambio en el ID de un departamento, el cambio se propaga automáticamente a la tabla
empleados.
Puedes probar este ejemplo directamente en db-fiddle.com seleccionando el motor PostgreSQL.
Insertemos datos ficticios
INSERT INTO departamentos (nombre) VALUES
('Finanzas'),
('Recursos Humanos'),
('Tecnología');
INSERT INTO empleados (nombre, id_departamento) VALUES
('Ana Torres', 1),
('Luis Pérez', 2),
('Marta López', 3); Prueba de integridad referencial
Intentemos insertar un empleado con un departamento inexistente:
INSERT INTO empleados (nombre, id_departamento) VALUES
('Carlos Méndez', 99); ➡️ Resultado:
Query Error: insert or update on table "empleados" violates foreign key constraint "empleados_id_departamento_fkey" Lo que nos quiere decir el mensaje de error es que el valor 99 no existe en departamentos, por lo que PostgreSQL lo rechaza.
Comportamientos de actualización y eliminación
Las llaves foráneas pueden configurarse con diferentes acciones al actualizar o eliminar registros:
| Acción | Descripción |
|---|---|
ON DELETE CASCADE | Elimina también los registros relacionados. |
ON DELETE SET NULL | Deja el campo nulo al eliminar el registro padre. |
ON DELETE RESTRICT | Impide la eliminación si hay registros hijos. |
ON UPDATE CASCADE | Propaga cambios del valor clave a las tablas hijas. |
Ejemplo con eliminación en cascada:
CREATE TABLE proyectos (
id_proyecto SERIAL PRIMARY KEY,
nombre VARCHAR(100) NOT NULL,
id_departamento INT REFERENCES departamentos(id_departamento)
ON DELETE CASCADE
); Si eliminas un departamento, también se eliminarán automáticamente sus proyectos asociados.
Buenas prácticas
- Define las llaves foráneas desde el inicio del diseño.
- Usa nombres descriptivos (por ejemplo,
fk_empleados_departamentos). - Aplica
ON DELETEyON UPDATEsegún la lógica de negocio. - Asegúrate de tener índices en las columnas relacionadas.
- Evita eliminar en cascada si puede comprometer la integridad histórica.
Conclusión
La integridad referencial no solo evita errores; garantiza coherencia a largo plazo.
Las llaves foráneas equivalen al pegamento que une las partes de tu modelo de datos, asegurando que cada registro esté donde debe estar.