我有一个包含三列(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
答案 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,我正在看你),你必须使用触发器来实现检查约束。