Voici un tableau simple où les enregistrements peuvent référencer les enregistrements parents dans le même tableau:
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)
);
Avec l'exigence supplémentaire que l'une des autres valeurs de champ ( num
) doit être identique entre les enregistrements parent et enfant, j'ai pensé qu'une clé étrangère composite devrait faire l'affaire. J'ai changé la dernière ligne en
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
et obtenu ERREUR: il n'y a pas de contrainte unique correspondant aux clés données pour la table référencée "foo" .
Je peux facilement ajouter cette contrainte, mais je ne comprends pas pourquoi elle est nécessaire, alors qu'une des colonnes référencées ( id
) est déjà garantie d'être unique? D'après moi, la nouvelle contrainte serait redondante.
NULL != NULL
. Quoi qu'il en soit .. :)