Я пытаюсь смоделировать систему каталогизации в DynamodDB. У этого есть "Каталоги", который содержит "Коллекции". Каждая «Коллекция» может быть помечена многими «Тегами».
В СУБД я бы создал таблицу "Каталоги" с отношением 1: n с "Коллекциями". «Коллекции» будут иметь n: n с «Тегами», поскольку Коллекция может иметь несколько тегов, а тег может принадлежать нескольким коллекциям.
Запросы, которые я хочу выполнить:
1) Получить все каталоги
2) Получить каталог по ID
3) Получить коллекции по ID каталога
Я прочитал на 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. это кот-2. Я никогда не видел, чтобы это было сделано, поэтому я не уверен, стоит ли идти этим путем, и мне нужно какое-то обслуживание, если я когда-нибудь захочу изменить ID.
Есть идеи, как мне это сделать?