Подтвердить что ты не робот

Есть ли способ принудительного применения уникального ограничения для свойства (поля), отличного от первичного ключа в dynamodb

В dynamodb, если вы хотите обеспечить уникальность в поле, отличном от первичного ключа (например, если у вас есть таблица пользователей и вы хотите иметь уникальные адреса электронной почты для пользователей, в то время как первичный ключ является идентификатором пользователя, который является числом) существует ли способ другие сканируют таблицу, чтобы узнать, действительно ли почта уже используется?

4b9b3361

Ответ 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