2013-03-31 28 views
5

我的表是一样的东西的Oracle SQL唯一约束A到B,B到A

 
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只有一个唯一的距离,但不能同时有两个距离。

+0

我会建议创建一个触发器和chk匹配巴黎 – Akash

+0

我不能创建一个触发器。我必须以另一种方式解决问题。 – zeal

+1

你可以加上'B A 50'吗? –

回答

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

将阻止添加(B,A,100)如果(A,B,100)已经在桌子上了。

+0

'在the_table上创建唯一索引index_name(最少(from,to),最大(from,to));'像魅力一样工作,谢谢:) – zeal

2

如果你愿意做这个规则,你可以尝试一个CHECK约束:

CONSTRAINT force_collation CHECK (FROM < TO) 
+2

这对于特定情况非常有用,但是如果我想要保存'Z A 100',虽然'A Z 100'不在表格中,但它会失败。 – zeal

+0

但是你仍然可以保存A Z 100,不是吗?这就是为什么他说“如果你愿意做这个规则”。 – DCookie

+0

是的,但我不能强制插入值的字母顺序! – zeal

相关问题