Я не уверен, что это правильное место, чтобы задать этот вопрос.
Я новичок в Dynamodb и пытаюсь найти выход, чтобы создать небольшое веб-приложение. Я прочитал здесь лучшие практики http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html
Мои таблицы будут:
- Здания
- Арендаторы (в здании может быть столько арендаторов, сколько определяется номером этажа)
- Получатели (на каждом этаже может быть столько получателей, как правило, псевдоним арендатора)
- Курьеры
- Доставка (курьер, привязанный к конкретному получателю)
В настоящее время мой подход к разработке схемы выглядит так:
// Tables
// PK: Building Id, SK: name
- Building ID : {
name: <Building Name>
Tenants: [
{ TenantId: { Receipients: [{Receipient Id 1, Receipient Id 2...}] }
]
}
// PK: Courier Id, SK: createdAt
- CourierId : {
name: <Courier name>
...
}
//PK: Not Sure, SK: Not Sure <-- This is where I messed up, looks relational, defeats the purpose?
- Deliveries: {
receipient id: Courier id
}
Чтобы перечислить все доставки вместе с данными получателя, мне понадобятся данные получателя по идентификатору получателя. Согласно документам LSI, получатель Id как ключ сортировки в таблице Building.
Поскольку у вас могут быть только элементы верхнего уровня в таблице (получатель не является тем), это кажется невозможным согласно руководству https://docs.amazonaws.cn/en_us/amazondynamodb/latest/developerguide/GSI..html.
Атрибуты ключа индекса могут состоять из любых строковых, числовых или двоичных атрибутов верхнего уровня из базовой таблицы; другие скалярные типы, типы документов и типы наборов не допускаются.
Итак, я безнадежно, что этого можно достичь без создания другой таблицы, куда я должен скопировать всех получателей, обновляя их все, что происходит обновление в таблице. Есть ли другой альтернативный или лучший подход?
Поскольку доставка кажется взаимно однозначной связью курьеров с получателем, можно ли сохранять идентификаторы и перебирать всех получателей и курьеров во время перечисления всех доставок?