Ecco una semplice tabella in cui i record possono fare riferimento a record parent nella stessa tabella:
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 il requisito aggiuntivo che uno degli altri valori di campo ( num
) deve essere identico tra i record padre e figlio, ho pensato che una chiave esterna composita avrebbe dovuto fare il trucco. Ho cambiato l'ultima riga in
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
e ha ottenuto ERRORE: non esiste un vincolo univoco per la corrispondenza delle chiavi fornite per la tabella referenziata "pippo" .
Posso facilmente aggiungere questo vincolo, ma non capisco perché sia necessario, quando una delle colonne di riferimento ( id
) è già garantita come unica? Per come la vedo io, il nuovo vincolo sarebbe ridondante.
NULL != NULL
. Comunque .. :)