【发布时间】:2020-01-10 05:09:45
【问题描述】:
我是 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,它可以创建和加入Room。当User 创建房间时,他已经加入了里面。
我需要做几件事。
- 创建一个没有空间的新用户。
- 将房间附加到用户。
- 通过
telegram_user_id轻松找到用户。 - 当另一个用户加入房间时添加
Room.second_user,当我有Room.id和User.telegram_user_id时。 - 找到
Room.second_user,当我有User.telegram_user_id时。
大多数查询将在通过 telegram_id 查询 User 以及在房间内使用第一个用户 telegram_user_id 查找第二个用户时进行。
我不明白如何为 DynamoDB 很好地设计它。
我可能会使用关系数据模型并做几个查询。在该示例中,User.room 将只是 Room.id 和 Room.first_user,Room.second_user 将是 User.id。
要找到第二个用户,第一个用户telegram_user_id 我必须做几个查询。
- 寻找第一个用户
- 使用
User.room作为分区键来查找Room - 然后通过
Room.second_user中的id 找到第二个User。
但是用几个独立的查询来做这件事感觉不对。
但是如果没有关系数据模型,我不知道如何很好地实现我的需求。
如何设计这张桌子?
【问题讨论】:
标签: database-design nosql amazon-dynamodb