...

Integridad referencial y llaves foráneas en SQL: conecta tus datos con propósito

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 empleados puede hacer referencia a una tabla departamentos.
  • 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 NULL en su campo id_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ónDescripción
ON DELETE CASCADEElimina también los registros relacionados.
ON DELETE SET NULLDeja el campo nulo al eliminar el registro padre.
ON DELETE RESTRICTImpide la eliminación si hay registros hijos.
ON UPDATE CASCADEPropaga 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

  1. Define las llaves foráneas desde el inicio del diseño.
  2. Usa nombres descriptivos (por ejemplo, fk_empleados_departamentos).
  3. Aplica ON DELETE y ON UPDATE según la lógica de negocio.
  4. Asegúrate de tener índices en las columnas relacionadas.
  5. 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.

Deja un comentario

Seraphinite AcceleratorOptimized by Seraphinite Accelerator
Turns on site high speed to be attractive for people and search engines.