Aquí hay una tabla simple donde los registros pueden hacer referencia a registros primarios en la misma tabla:
CREATE TABLE foo (
id SERIAL PRIMARY KEY,
parent_id INT NULL,
num INT NOT NULL,
txt TEXT NULL,
FOREIGN KEY (parent_id) REFERENCES foo(id)
);
Con el requisito adicional de que uno de los otros valores de campo ( num
) debe ser idéntico entre los registros primarios y secundarios, pensé que una clave externa compuesta debería ser la solución. Cambié la última línea a
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
y obtuve ERROR: no existe una restricción única que coincida con las claves dadas para la tabla referenciada "foo" .
Puedo agregar fácilmente esta restricción, pero no entiendo por qué es necesaria, cuando una de las columnas a las que se hace referencia ( id
) ya se garantiza que es única. A mi modo de ver, la nueva restricción sería redundante.
NULL != NULL
. De todos modos .. :)