Как правило, в базах данных в стиле nosql вы предоставляете уникальный идентификатор, а не поле PK с автоматическим приращением, которое делает это за вас.Обычно это означает, что для каждой записи пользователя будет использоваться GUID.
Что касается пользовательских ролей, существует множество способов сделать это, и у каждого есть свои преимущества и проблемы:
Одним простым способом было бы добавить атрибут «Роль» в таблицу «Пользователи» и иметь одну запись для каждой роли для этого пользователя.Тогда вы можете получить пользователя и получить все роли в одном запросе.DynamoDB позволяет атрибутам иметь несколько значений, поэтому один атрибут может иметь одно значение для каждой роли.
Если вам нужно иметь возможность запрашивать пользователей в определенной роли (например, «Дайте мне всех пользователей, которые являются супервизорами»)) тогда вы будете выполнять сканирование таблицы в DynamoDB, что может быть дорогостоящей операцией.Но если количество пользователей достаточно мало и необходимость такого поиска нечаста, это все же может быть приемлемо для вашего приложения.
Если вам действительно нужен такой дорогой поискчасто вам нужно будет создать новую таблицу, например, «RolesWithUsers», имеющую одну запись на роль, с именами пользователей в записи роли.Для большинства приложений я бы посоветовал не делать что-то подобное, потому что теперь у вас есть две таблицы, отражающие один факт: какую роль играет конкретный пользователь.Таким образом, удаление или обновление необходимо выполнять в двух местах каждый раз.Это невозможно сделать, но требуется больше бдительности и тестирования, чтобы убедиться, что ваше приложение не получает неправильные данные.Другим недостатком этого подхода является то, что вам нужны два запроса для получения информации, которые могут быть более дорогими, чем сканирование таблицы, опять же, в зависимости от количества записей.
Еще один вариант, который имеет смысл для этого конкретноговариант использования будет использовать SimpleDb.У него лучшая возможность запросов (все атрибуты индексируются по умолчанию), и в этом случае единственная таблица с ролями в качестве многозначного атрибута будет гораздо лучшим решением, чем DynamoDB.
Надеюсь, это поможет!