Я новичок в дизайне базы данных No SQL. Для моего приложения у меня есть две сущности для хранения в базе данных. Я буду использовать 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
.
Большинство запросов будет при запросе User
по telegram_id
и при поиске второго пользователя внутри комнаты, используя первого пользователя telegram_user_id
.
Я не понимаю, как спроектировать его для DynamoDB. Я мог бы использовать реляционную модель данных и сделать несколько запросов. В этом примере User.room
будет просто Room.id
и Room.first_user
, Room.second_user
будет User.id
.
Чтобы найти второго пользователя, по первому пользователю telegram_user_id
Мне нужно будет сделать несколько запросов .
- Поиск первого пользователя
- Использование
User.room
в качестве ключа раздела для поиска Room
- Затем поиск второго
User
по идентификатору в Room.second_user
.
Но кажется неправильным делать это с несколькими независимыми запросами.
Но я не знаю, как правильно реализовать мои требования без реляционной модели данных.
Как оформить этот стол?