1

我有一个包含三列 ( 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
4

2 回答 2

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

它增加了少量的复杂性,INSERT但使执行所需的约束非常容易。

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

于 2013-04-12T06:11:40.450 回答
1

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

于 2013-04-12T01:13:45.873 回答