У меня есть две сущности, имеющие отношения многие ко многим.
Пользователи и фотографии.
Когда я получаю пользователя, мне также нужно получить все фотографии, на которых он отмечен.
Когда я получаю фотографию, мне также нужно отметить всех пользователей на фотографии.
Я прочитал Рекомендации по управлению отношениями «многие ко многим» и придумал этот дизайн:
| partitionKey | sortKey | name | filePath | uploadDate |
|:------------:|--------- :|:----------:|:--------:|:----------:|
|user-a123 |user-a123 |John Smith | | |
|user-b133 |user-a123 |Rick Andres | | |
...
|photo-a334 |photo-a334 | | s3://.. | 06-05-19 |
|photo-b777 |photo-b777 | | s3://... | 07-13-15 |
...
|user-a123 |photo-a334 | | | |
|user-b133 |photo-b777 | | | |
|user-b133 |photo-a334 | | | |
|user-zm15 |photo-a334 | | | |
Я также создал GSI, где sortKey и partitionKey меняются местами.
Это дает мне возможность:
- Получить пользователя + id всех фотографий, на которых он был отмечен
- Получить фотографию + id всех пользователей, отмеченных на фотографии
Проблема в том, что id недостаточно.
Например, при получении пользователя мне также нужно сделать запрос BatchGetItem для всех фотографий.
Есть ли способ получить всю информацию в одном запросе?
Я думал о дублировании данных, но тогда, если кто-то пометит пользователя на фотографии, а кто-то еще редактирует детали фотографии, в то же время данные в помеченном элементе будут повреждены.