Database design 如何在表中存储循环文档?
我是NoSQL数据库设计新手。对于我的应用程序,我有两个实体存储在数据库中。我将使用类似JSON的符号来表示结构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> } 所以我基本上有一个用户
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=以用户秒开始 希望这对你有帮助