顺序很重要时的多对多关系

Many to many relationship when order metter

我在用户和组之间存在多对多关系:组可能包含几个用户并且由多个组组成。 服务器像这样发给我json,我需要存到DB:

group: {
  name: "test", id: "UUID"
  users: [
    {name: "user1", id: "UUID"}, 
    {name: "user2", id: "UUID"}, 
    {name: "user3", id: "UUID"} 
  ]
}

问题是: 用户在群组事务中的顺序 - 用户应该以与在服务器中相同的顺序显示 json。 我使用的第一个解决方案是添加到组字段中 user_ids: [user1_uuid, user2_uuid, user3_uuid] 并将其存储到 json fromat 中的数据库中,但我发现此解决方案中有 2 个问题:

  1. 它与第一范式 (1NF) 相矛盾
  2. 当我 SELECT 值时,它们的顺序有误:

SELECT * FROM user WHERE id IN (:user_ids)

如何存储到数据库中SELECT?

在SQL中,table行确实是无序的;获得有序行的唯一保证方法是使用 ORDER BY。

如果数组元素的顺序很重要,请为数组索引添加一列。

您可以使用以下架构:

CREATE TABLE user(id integer primary key, name text);
CREATE TABLE grp(id integer primary key, name text);
CREATE TABLE usergrp(userid integer, grpid integer, position integer);
CREATE INDEX positionindex on usergrp(grpid, position);

然后您可以使用查询

检索属于某个组的用户
SELECT userid FROM usergrp WHERE grpid=? ORDER BY position;

此外,也许您想对 usergrp 使用 "without rowid" sqlite table 存储选项。