防止在两个用户之间多次插入连接 (SQL / SQLite)

Preventing multiple insertions of a connection between two users (SQL / SQLite)

我目前正在做一个项目,我想在 SQLite 数据库中存储两个用户之间的连接和一些附加信息。问题是我想只存储一次这个连接,并且没有这个连接的多个条目。

因此,如果我有 userA 和 userB,例如建立此连接的时间(userA、userB、时间),我不希望也能够存储反向(userB、userA、时间) .

我目前的解决方案是对用户进行排序并将它们组合成一个字符串,然后使用该字符串创建一个主键(userAuserB、userA、userB、time),以防止重新插入。但我认为这不是正确的做法。

这个任务有更好的解决方案吗?
谢谢,Ypselon。

如果您的 SQLite 版本是 3.31.0+,您可以在 table 中定义 2 generated columns,这将是列的最小和最大连接值,然后您可以定义一个他们的唯一约束:

CREATE TABLE tablename (
  userA TEXT,
  userB TEXT,
  user1 GENERATED AS (MIN(userA, userB)),
  user2 GENERATED AS (MAX(userA, userB)),
  UNIQUE(user1, user2)
);

生成的列是虚拟的,意味着它们不存储在table.

参见demo