6

我的桌子有点像

从到距离              
------ ---- ----------
AB 100  
公元前100
ZA 120

我需要向表中添加一个不允许插入 B A 100C B 100或的约束A Z 120

我有一个PRIMARY KEY (from, to)CONSTRAINT const_u UNIQUE (to, from)但它没有按预期工作。

编辑:我也无法在插入时强制按字母顺序正确排序,因为我无权访问插入逻辑 EDIT#2:你可以添加 BA 50 吗?——不,你不能。从 A 到 B 或 B 到 A 的距离应该只有一个唯一距离,但不能同时存在。

4

2 回答 2

11
create unique index on the_table (least(from,to), greatest(from,to));

如果 (A,B,100) 已经在表中,将阻止添加 (B,A,100)。

于 2013-03-31T18:27:06.040 回答
2

如果您愿意将此作为规则,您可以尝试CHECK约束:

CONSTRAINT force_collation CHECK (FROM < TO)
于 2013-03-31T16:02:06.347 回答