gpt4 book ai didi

sqlite - 如何在sqlite3中以顺序表示唯一值对的检查?

转载 作者:行者123 更新时间:2023-12-03 15:41:25 24 4
gpt4 key购买 nike

我需要在sqlite3数据库中表达路径数据。我有图,我需要保存一些顶点之间的最短路径。现在,由于我的图是双向的,因此A和B之间的最短路径将与B和A之间的路径相同。

我当前的数据库结构如下所示:

create table shortest (
id1 long,
id2 long,
...
);


现在,我如何表达约束,即 (id1, id2)必须是唯一的,而与顺序无关?因此,如果我尝试插入 insert into shortest values (2, 1, ...)并且已经存在 (1, 2, ...)记录,则插入将失败?

我无法弄清楚:/

注意:如果需要,可以更改数据库结构,这是一个新项目。

最佳答案

在一般情况下,可以通过触发器解决:

CREATE TRIGGER shortest_unique_path
BEFORE INSERT ON shortest
FOR EACH ROW
BEGIN
SELECT RAISE(ABORT, 'reverse path already exists')
FROM shortest
WHERE id1 = NEW.id2
AND id2 = NEW.id1;
END;


但是,引入一个附加约束,即必须首先使用较小的vertx插入路径可能会更容易:

CREATE TABLE shortest (
id1 LONG,
id2 LONG,
...,
UNIQUE(id1, id2),
CHECK(id1 < id2)
);

关于sqlite - 如何在sqlite3中以顺序表示唯一值对的检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31770677/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com