Oracle SQL唯一约束A到B,B到A

时间:2013-03-31 15:49:09

标签: sql oracle

我的表格就像

FROM   TO     DISTANCE              
------ ---- ---------- 
A      B    100  
B      C    100
Z      A    120

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

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

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

2 个答案:

答案 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)