Todos los términos del glosario

Clave foránea

¿Qué es una clave foránea en PostgreSQL?

Una clave foránea exige que los valores de una tabla coincidan con una fila de otra, así que no puedes apuntar a una fila que no existe. ON DELETE decide qué pasa cuando se elimina esa fila.

Una restricción de clave foránea especifica que los valores de una columna (o de un grupo de columnas) deben coincidir con los valores de alguna fila de otra tabla. Mantiene la coherencia entre tablas relacionadas: se rechaza cualquier inserción o actualización que apunte a una fila inexistente.

Las columnas referenciadas deben ser una clave primaria o tener una restricción de unicidad. Cuando se elimina una fila referenciada, la acción ON DELETE decide qué ocurre: NO ACTION (el valor predeterminado) y RESTRICT rechazan la eliminación, CASCADE también elimina las filas que la referencian, y SET NULL o SET DEFAULT las modifican. PostgreSQL no indexa automáticamente las columnas que hacen la referencia, y suele valer la pena agregar un índice ahí.

Ejemplo

El ejemplo vincula facturas con clientes mediante ON DELETE CASCADE. Al eliminar el cliente también se elimina su factura, así que el conteo final es 0.

CREATE TABLE customers (id int PRIMARY KEY, name text NOT NULL);
CREATE TABLE invoices (
  id int PRIMARY KEY,
  customer_id int NOT NULL REFERENCES customers (id) ON DELETE CASCADE,
  amount numeric NOT NULL
);
INSERT INTO customers VALUES (1, 'Acme');
INSERT INTO invoices VALUES (10, 1, 99.50);

DELETE FROM customers WHERE id = 1;
SELECT count(*) FROM invoices;

SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.

Fuentes

Documentación oficial de PostgreSQL (en inglés).

Términos relacionados