Aqui está uma tabela simples em que os registros podem fazer referência aos registros-pai na mesma tabela:
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)
);
Com o requisito adicional de que um dos outros valores de campo ( num
) deva ser idêntico entre os registros pai e filho, pensei que uma chave estrangeira composta deveria fazer o truque. Eu mudei a última linha para
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
e obteve ERRO: não há nenhuma restrição exclusiva correspondente às chaves fornecidas para a tabela referenciada "foo" .
Posso adicionar facilmente essa restrição, mas não entendo por que é necessário, quando uma das colunas referenciadas ( id
) já é garantida como única? Do meu ponto de vista, a nova restrição seria redundante.
NULL != NULL
. Enfim .. :)