如何在表中的两个字段上有效地创建唯一索引,如下所示:create table t(整数,b整数);
其中两个不同数字的任何唯一组合在表格的同一行上不能出现多次.
换句话说,如果存在a = 1且b = 2的行,则在a = 2且b = 1或a = 1且b = 2的情况下不能存在另一行.换句话说,两个数字不能以任何顺序一起出现多次.
我不知道这样的约束是什么,因此标题中的"双面唯一索引"名称.
更新:如果我在列(a,b)上有复合键,并且数据库中存在行(1,2),则可以插入另一行(2,1)而不会出现错误.我正在寻找的是一种防止同一对数字在任何顺序中被多次使用的方法......
如何控制进入表中的内容,以便始终将最小的数字存储到第一列中,将最大的数字存储在第二列中?只要它"意味着"同样的事情当然.在它进入数据库之前执行此操作可能更便宜.
如果这是不可能的,您可以按原样保存字段,但将它们按数字顺序复制到两个OTHER字段中,您将在其中创建主键(伪代码ish):
COLUMN A : 2 COLUMN B : 1 COLUMN A_PK : 1 ( if new.a < new.b then new.a else new.b ) COLUMN B_PK : 2 ( if new.b > new.a then new.b else new.a )
这可以通过触发器(如在Ronald的响应中)轻松完成,或者在应用程序中处理得更高.