Вот простая таблица, где записи могут ссылаться на родительские записи в той же таблице:
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)
);
С добавленным требованием, что одно из значений других полей ( num
) должно быть одинаковым в родительских и дочерних записях, я подумал, что составной внешний ключ должен помочь. Я изменил последнюю строку на
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
и получил ОШИБКУ: не существует уникального ограничения, соответствующего данным ключам для ссылочной таблицы "foo" .
Я легко могу добавить это ограничение, но я не понимаю, почему это необходимо, когда один из столбцов, на которые есть ссылки ( id
), уже гарантированно является уникальным? На мой взгляд, новое ограничение будет излишним.
NULL != NULL
. Во всяком случае .. :)