我的表格就像
FROM TO DISTANCE ------ ---- ---------- A B 100 B C 100 Z A 120
我需要在表中添加一个不允许插入的约束
B A 100
或C B 100
或A Z 120
我有一个PRIMARY KEY (from, to)
和CONSTRAINT const_u UNIQUE (to, from)
,但它没有按预期工作。
编辑: 我也无法在插入时强制按字母顺序排列正确的顺序,因为我无法访问插入逻辑 编辑#2:你能加B A 50吗? - 不,你不能。从A到B或B到A应该只有一个唯一的距离,但不能同时存在两个。
答案 0 :(得分:10)
create unique index on the_table (least(from,to), greatest(from,to));
如果(A,B,100)已经在表格中,则会阻止添加(B,A,100)。
答案 1 :(得分:2)
如果您愿意将此作为规则,则可以尝试CHECK
约束:
CONSTRAINT force_collation CHECK (FROM < TO)