Обработка большего количества отношений «многие ко многим» в одной таблице dynamodb

#amazon-web-services #amazon-dynamodb

#amazon-web-services #amazon-dynamodb

Вопрос:

Я разрабатываю единую таблицу dynamodb для института. В нем есть такие объекты, как институт, студенты, предметы и преподаватели. Отношения между ними выглядят следующим образом.

  • институт — студенты многие ко многим
  • институт — преподаватели многие ко многим
  • институт — подчиняет многих многим

Я выбрал идентификатор института как PK, а местоположение — как SK. Но в этом сценарии отношений «многие ко многим» больше. Итак, как справиться с подобной ситуацией в was dynamodb?

Заранее спасибо.

Ответ №1:

DynamoDB — это база данных NoSQL, в которой вы должны денормализовать и максимально дублировать свои данные. Вы думаете на языке SQL и пытаетесь нормализовать свои данные, вам нужно изменить свое мышление.

Создайте элемент для каждого института, студента, преподавателя и предмета. Создайте students карту или список (я предпочитаю карту с идентификатором в качестве ключа) внутри института и institutes карту или список внутри студентов. Эти карты или списки состоят из копий ваших оригинальных элементов:

 inst-0 | USA  | Institute name                              | { stud-0: { name: John }, studo-1: { name: Matt } }
-----------------------------------------------------------------------------------------------------------------
stud-0        | John | { inst-0: { name: Institute name } } |
-----------------------------------------------------------------------------------------------------------------
stud-1        | Matt | { inst-0: { name: Institute name } } |

  

Недостатком здесь является то, что вам необходимо обновлять каждую копию при изменении оригинала. Но, как правило, это не проблема, если ваши данные не меняются очень часто.

Если скопированные данные часто меняются, вы можете создать промежуточный элемент отношений, но тогда, возможно, база данных отношений больше подходит для вашего проекта.

Вы также можете создать элемент для каждого учащегося и просто сохранить ссылку на этого учащегося в элементах института. Но и здесь вы не денормализуете свои данные, но это может быть жизнеспособным решением, если ваши данные часто меняются или если у вас много студентов в каждом институте.