SQL:如何将唯一约束应用于两个列的组合,其中两个项目的组合(无气味)是唯一的

时间:2013-04-12 00:29:35

标签: sql

我有一个包含三列(node1 varchar, node2 varchar, other_data int

的表格

node1和node2是构成图形边缘的节点。

所以if node1 = A and node2 = B,它等同于node1 = B and node2 = A

有没有办法确保无法创建重复的条目。

例如,如果输入以下内容:

node1 = A, node2 = B, other = 123

如果有人试图输入以下内容,则会因桌面中已有两个节点而失败:

node1 = B, node2 = A, other = 123

2 个答案:

答案 0 :(得分:1)

编写一个触发器,在node1和node2的SORTED组合上构建构造字段,并尝试将其插入唯一索引。

答案 1 :(得分:1)

我通常会使用CHECK约束来实现此操作,以使node1始终排在node2之前:

create table T(
  node1 varchar(20) not null,
  node2 varchar(20) not null,
  other_data int null,
  constraint CK_T_node_order CHECK (node1<node2),
  constraint UQ_T_nodes UNIQUE (node1,node2)
)

它为<{1}}添加了的复杂程度,但是很容易强制执行您想要的约束。

当然,您还没有说过您使用的SQL产品。如果你的不支持INSERT约束(Grr.MySQL,我正在看你),你必须使用触发器来实现检查约束。