Получить реляционные данные в DynamodB - PullRequest
0 голосов
/ 21 февраля 2019

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

Моя структура базовой таблицы: -

**PK** **SK** **data**

university uni_uuid name

course course_uuid uni_uuid

Как вы увидите, когда я добавлю новый курс, он всегда будет иметь университетский UUID, который будет сохраняться в ключе university_uuid с записью курса.

Теперь я хочу перечислить все курсы для администратора.Поэтому я запрашиваю динамодаб вроде: -

var params = {
      TableName: "BaseTable",
      FilterExpression:"PK = :type",
      ExpressionAttributeValues: {
          ":type": "Course"
      }
  };

  docClient.scan(params, onScan);
  var count = 0;

  function onScan(err, result) {
      if (err) {
          console.error("Unable to scan the table. Error JSON:", JSON.stringify(err, null, 2));
      } else {        
          resolve(result);
      }
  }

Это успешно возвращает мне все добавленные курсы.Как: - enter image description here

Теперь мой вопрос заключается в том, как я могу показать название университета в столбце Университет.В настоящее время University_uuid отображается здесь.Нужно ли мне выполнить другой запрос и найти название университета по его uuid, если это так, то для 100 курсов мне нужно выполнить еще 100 запросов для каждого названия курса.

Любая помощь будет высоко оценена !!

1 Ответ

0 голосов
/ 23 февраля 2019

Подходы:

  1. Если название университета не будет изменено в Admin, вы можете использовать денормализацию и включить ее в курсы таблицу.Даже если название университета можно изменить, при обновлении вы можете получить все соответствующие курсы по uni_uuid и обновить избыточные данные.
  2. Когда вы получаете список курсов, различайте uni_uuid, а затем запрашиваете данные из университетов, используя IN clouse.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...