顺序很重要时的多对多关系
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 个问题:
- 它与第一范式 (1NF) 相矛盾
- 当我 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 存储选项。
我在用户和组之间存在多对多关系:组可能包含几个用户并且由多个组组成。 服务器像这样发给我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 个问题:
- 它与第一范式 (1NF) 相矛盾
- 当我 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 存储选项。