Как перенести реляционные таблицы в таблицу DynamoDB - PullRequest
0 голосов
/ 01 июня 2018

Я новичок в DynamoDB, в моем текущем проекте я пытаюсь перенести большинство реляционных таблиц в Dynamo DB.У меня сложный сценарий, который я не знаю, как решить

В Posgresql 2 таблицы:

Student
id |  name  | age | address | phone 
---+--------+-----+---------+--------
1  | Alex   | 18  | aaaaaa  | 88888
2  | Tome   | 19  | bbbbbb  | 99999
3  | Mary   | 18  | ccccc   | 00000
4  | Peter  | 20  | dddddd  | 00000

Registration
id | class  | student | year 
---+--------+---------+---------
1  | A1     | 1       | 2018
2  | A1     | 3       | 2018
3  | A1     | 4       | 2017
4  | B1     | 2       | 2018

Мой запрос:

select s.id, s.name, s.age, s.address, s.phone
from Registration r inner join Student s on r.student = s.id
where r.class = 'A1' and r.year = '2018'

Результат:

id |  name  | age | address | phone 
---+--------+-----+---------+--------
1  | Alex   | 18  | aaaaaa  | 88888
3  | Mary   | 18  | ccccc   | 00000

Итак, как мне создать таблицу динамо-БД для достижения этого результата?в расширении для CRUD

Любой совет приветствуется

1 Ответ

0 голосов
/ 01 июня 2018

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

          | (GSI PK) |
(P. Key)  | (Sort)   |                                 (GSI Sort)
studentId | itemType |  name  | age | address | phone | year 
----------+----------+--------+-----+---------+-------+------
1         | Details  | Alex   | 18  | aaaaaa  | 88888 |
1         | Class_A1 |        |     |         |       | 2018
2         | Details  | Tome   | 19  | bbbbbb  | 99999 |
2         | Class_B1 |        |     |         |       | 2018
3         | Details  | Mary   | 18  | ccccc   | 00000 |
3         | Class_A1 |        |     |         |       | 2018
4         | Details  | Peter  | 20  | dddddd  | 00000 | 
4         | Class_A1 |        |     |         |       | 2017

Обратите внимание на глобальный вторичный индекс с ключом раздела для типа элемента и ключом сортировки для года.С этим дизайном у нас есть несколько вариантов запроса:

1) Получить студента по заданному идентификатору: GetItem (partitionKey: studentId, sortkey: Details)

2) Получить все классы для данного студентаid: Query (partitionKey: studentId, sortkey: STARTS_WITH ("Class"));

3) Получить всех учащихся в классе A1 и 2018 году: Query (GSI partitionkey: "Class_A1", sortkey: equals (2018)))

Для глобальных вторичных индексов раздел и ключ сортировки не обязательно должны быть уникальными, поэтому вы можете иметь много комбинаций Class_A1, 2018.Если вы еще не прочитали Best Practices для DyanmoDB , я настоятельно рекомендую прочитать его полностью.

...