В dynamodb, если вы хотите обеспечить уникальность в поле, отличном от первичного ключа (например, если у вас есть таблица пользователей и вы хотите иметь уникальные адреса электронной почты для пользователей, в то время как первичный ключ является идентификатором пользователя, который является числом) существует ли способ другие сканируют таблицу, чтобы узнать, действительно ли почта уже используется?
Есть ли способ принудительного применения уникального ограничения для свойства (поля), отличного от первичного ключа в dynamodb
Ответ 1
Короткий ответ: Нет.
DynamoDB - это ключ: хранилище значений. Он очень хорош в быстром извлечении/сохранении элементов, потому что он выполняет несколько компромиссов. Это ограничение, с которым вы должны справиться.
Nonethess, в зависимости от вашей реальной модели, может быть хорошей идеей использовать это поле в качестве hash_key
или рассмотреть возможность использования range_key
Если это невозможно, я советую вам де-нормализовать ваши данные. У вас есть что-то вроде:
UserTable
-
hash_key
:user_id
-
e-mail
- ...
Чтобы обеспечить однозначность, добавьте новую таблицу с этой схемой:
EmailUser
-
hash_key
: e-mail -
user_id
Чтобы убедиться, что электронное письмо уникально, прежде всего отправьте GetItem
в EmailUser
.
Этот вид де-нормализации довольно распространен с базами данных без SQL.
Ответ 2
DynamoDB сам по себе не поддерживает уникальные ограничения, но вы можете каким-то образом обеспечить уникальность с помощью atomic counter
и включить это значение счетчика в свои данные.
В моем случае я должен убедиться, что и username
и userId
не имеют дубликатов. username
- это мой ключ раздела, поэтому у меня не возникнет проблем с использованием attribute_not_exists(username)
для предотвращения перезаписи;
Для userId
я сначала извлечу новое значение из атомного счетчика, а затем добавлю его в качестве значения userId. Это может быть не совсем последовательно, но это может гарантировать уникальность в этом смысле.
Ответ 3
Я не думаю, что упомянутый ниже подход обсуждается или нет, поэтому размещение соответствующей ссылки для обеспечения уникального адреса электронной почты (или любого другого атрибута). Это не потребует создания другой таблицы, но добавит дополнительные элементы в таблицу User в столбце первичного ключа.
Альтернативный подход для обеспечения уникальных атрибутов в DynamoDB