Я пытаюсь смоделировать систему каталогизации в DynamodDB. Он имеет «Каталоги», которые содержат «Коллекции». Каждая «Коллекция» может быть помечена многими «Тегами».
В СУБД я бы создал таблицу «Каталоги» с отношением 1: n к «Коллекциям». «Коллекции» будут иметь n:n с «Тегами», поскольку Коллекция может иметь несколько Тегов, а Тег может принадлежать нескольким Коллекциям.
Запросы, которые я хочу запустить:
1) Получить все каталоги
2) Получить каталог по ID
3) Получить коллекции по идентификатору каталога
Я читал на AWS, что могу использовать дизайн карты списка смежности (потому что у меня есть n: n с «Тегами»). Итак, вот структура моей таблицы:
PK SK name
cat-1 cat-1 Sales Catalog
cat-1 col-1 Sales First Collection
cat-1 col-2 Sales Second Collection
cat-2 cat-2 Finance Catalog
tag-1 tag-1 Recently Added Tag
col-1 tag-1 (collection, tag relationship)
Проблема здесь в том, что я должен использовать сканирование, которое, как я понимаю, неэффективно, чтобы получить все «Каталоги», потому что PK запроса должен быть «=», а не «Начинается с».
Единственное, что я могу придумать, это создать еще один атрибут, например «GSI_PK», и добавить «Catalog_1», когда PK — это cat-1, а SK — cat-1, «Catalog_2», когда PK — это cat-2, а SK — это cat-. 2. Я никогда не видел, чтобы это было сделано, поэтому я не уверен, что это правильный путь, и требуется некоторое обслуживание, если я когда-либо захочу изменить идентификаторы.
Есть идеи, как мне это сделать?