以下は、レコードが同じテーブル内の親レコードを参照できる単純なテーブルです。
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
)の1つが親レコードと子レコードの間で同一でなければならないという追加の要件により、複合外部キーでうまくいくと思いました。最後の行を
FOREIGN KEY (parent_id, num) REFERENCES foo(id, num)
となったエラー:参照された表「foo」というのキーを与えられた一意の制約マッチングはありません。
この制約は簡単に追加できますが、参照される列(id
)の1つが既に一意であることが保証されているのに、なぜ必要なのかわかりません。私の見たところ、新しい制約は冗長になります。
NULL != NULL
。とにかく.. :)