如何防止postgresql上键之间的循环关系



有一个名为consists_of的表,它与产品类别层次结构相关。

CREATE TABLE consists_of(
super_name VARCHAR(80),
sub_name VARCHAR(80),
UNIQUE(super_name, sub_name),
PRIMARY KEY(sub_name),
FOREIGN KEY(sub_name) REFERENCES category(name),
FOREIGN KEY(super_name) REFERENCES category(name),
CHECK (sub_name <> super_name)
);

如何防止循环关系,例如:

INSERT INTO consists_of values ('Cheese', 'Cheddar')

INSERT INTO consists_of values ('Cheddar', 'Cheese')

为了防止第二个INSERT语句,这个索引就足够了:

CREATE UNIQUE INDEX ON consists_of (
least(super_name, sub_name),
greatest(super_name, sub_name)
);

但这并不能阻止三个或三个以上条目的循环。

我可以想象的一件事是对每个类别都有一个级别。然后您可以强制要求sub_name的级别必须低于super_name的级别。

相关内容

  • 没有找到相关文章

最新更新