Database design 如何在表中存储循环文档?

Database design 如何在表中存储循环文档?,database-design,nosql,amazon-dynamodb,Database Design,Nosql,Amazon Dynamodb,我是NoSQL数据库设计新手。对于我的应用程序,我有两个实体存储在数据库中。我将使用类似JSON的符号来表示结构 User { id: Uuid, telegram_user_id: int64 room: Optional<Room>, nickname: String, } Room { id: Uuid, first_user: User second_user: Optional<User> } 所以我基本上有一个用户

我是NoSQL数据库设计新手。对于我的应用程序,我有两个实体存储在数据库中。我将使用类似JSON的符号来表示结构

User {
   id: Uuid,
   telegram_user_id: int64
   room: Optional<Room>,
   nickname: String,
}

Room {
   id: Uuid,
   first_user: User
   second_user: Optional<User>
}
所以我基本上有一个用户可以创建和加入一个房间。当用户创建房间时,他已经在里面加入了

我需要做几件事

创建一个没有空间的新用户。 将房间附加到用户。 通过电报用户id轻松找到用户。 当其他用户加入房间时,当我有Room.id和user.telegrame\u用户id时,添加Room.second\u用户。 当我有user.telegrame\u用户id时,查找Room.second\u用户。 大多数查询是在通过用户的电报id查询用户时进行的,以及在房间内使用第一个用户电报用户id查找第二个用户时进行的

我不知道如何为DynamoDB设计好它。 我可能会使用关系数据模型并进行一些查询。在该示例中,User.room将只是room.id和room.first_User,room.second_User将是User.id

为了找到第二个用户,通过第一个用户电报\u user\u id,我必须进行几个查询

查找第一个用户 使用User.room作为分区键查找房间 然后在Room.second_User中按id查找第二个用户。 但是用几个独立的查询来做这件事感觉是不对的

但是如果没有关系数据模型,我不知道如何很好地实现我的需求


如何设计此表?

您应该基于邻接列表设计模式进行设计:

分区键PK |排序键SK |数据|保留|属性

1用户电报|用户ID 1 |用户详细信息|昵称1 | ID 1

2用户电报|用户| id1 |房间UUID1 |连接时间

3用户电报|用户id1 |用户第二电报|用户id2 |房间UUID1 |连接时间

4用户电报|用户| id2 |用户详细信息|昵称2 | id2

5 ROOMuuid1 | ROOMdetail | createdAtTime

创建没有空间的用户:创建记录1,4 创建一个文件室:作为记录5,并将第一个用户作为记录2附加到文件室 查找用户,查询:PK=USERtelegram\u user\u id1,SK=USERdetail 将第二个用户作为记录3附加到房间 按第一个用户查找第二个用户,例如:用户电报\u用户\u id1,查询:PK=用户电报\u用户\u id1,SK=以用户秒开始 希望这对你有帮助