Я пытаюсь создать решение DynamoDB, в котором будут пользователи. Я выбираю единый дизайн таблицы, и мне нужно будет учесть несколько взаимосвязей, но они, вероятно, несущественны для этого вопроса. В этой таблице предусмотрена аутентификация пользователей, и пользователи будут входить в систему, используя учетные данные, которые хранятся в этой базе данных.
Я, очевидно, должен использовать перегрузку индекса для достижения этой цели. PK будет содержать значения, такие как USER_ID_XXXX, NOTE_ID_XXXX, и ключ сортировки будет изменяться в зависимости от содержимого PK.
У пользователя будут атрибуты email, имя пользователя и пароль.
Я думалделать что-то вроде следующего, где «данные» - это атрибут, который будет иметь все записи и будет варьироваться в зависимости от контекста, полученного из комбинации PK / SK:
PK: USER_ID_XXXX, SK: USERNAME, DATA: james, пароль: abc PK: USER_ID_XXXX, SK: EMAIL, DATA: james@test.com, пароль: abc
И затем каждый раз, когда пароль изменяется для USER_ID_XXXX, обновляйте его в записях, где SK = USERNAME илиEMAIL.
Проблема в том, что я не знаю, как создать GSI, который будет включать записи только с SK = USERNAME или EMAIL, поэтому мой GSI будет раздутым без необходимости с каждой записью.
Я подумал, что вместо этого я мог бы использовать атрибут USERNAME вместо DATA и создать GSI для этого. Имена пользователей не могут содержать «@», поэтому между именами пользователей и электронными письмами не будет конфликтов, но тогда я не уверен, что в этом случае использовать для SK.
Какое здесь лучшее решение? И если ответ будет вторым, как мне настроить SK?