У меня есть сценарий в DynamoDb, где записи имеют отношение «многие ко многим».
Обычно в SQL я создаю ассоциативную таблицу, чтобы разделить записи на отношения «один ко многим».
Например:
- Истории могут иметь несколько мест
- Места имеют несколько историй
Вот пример записи:
{
"storyId": "asd239ruefjsp32wf",
"name": "Donut store",
"locations": [
{
"locationId": "asdas23r23",
"name": "New South Whales",
"abbreviation": "NSW"
},
{
"locationId": "sdgkhsdf98",
"name": "Queensland",
"abbreviation": "QLD"
}
]
}
Возможно, это можно разделить на 3 таблицы:
Рассказы
Местоположение
StoriesLocations (с GSI - partitionKey = locationId)
- storyLocationId
- storyId
- locationId
Моя большая проблема в том, что пользователь может искать истории, используя более 1 locationId.
GET /stories?locations=sdgkhsdf98,asdas23r23
Запрос GSI для StoriesLocations с использованием каждого storyId по отдельности не кажется хорошим решением, особенно если мне тогда придется получить все данные истории после слов и управлять разбиением на страницы.
В настоящее время существует только 1 страна с 7 местоположениями. Таким образом, только несколько мест будут обыскиваться.
Есть ли более эффективный способ хранения данных? или даже спрашивая?
Я выбрал DynamoDB из-за его скорости, и обычно я занимаюсь разработкой интерфейса. Так что с настройкой базы данных SQL у меня не было большого опыта. Я также буду использовать чата в реальном времени Appsync, который по умолчанию использует DynamoDB.