Est-il un moyen de faire respecter la contrainte unique sur une propriété (terrain) autres que la clé primaire dans dynamodb
Dans dynamodb, si vous souhaitez appliquer l'unicité dans un domaine autre que la clé primaire (comme vous auriez une table des utilisateurs et souhaitez unique adresses e-mail pour les utilisateurs tout en clé primaire est un nom d'utilisateur qui est un nombre) est-il un moyen d'autres thans analyse de la table pour voir si l'email est déjà utilisé?
Vous devez vous connecter pour publier un commentaire.
Réponse courte: Non.
DynamoDB est une clé:valeur magasin. Il est très bon à extraire rapidement/l'enregistrement d'Éléments, car il fait un certain nombre de compromis. C'est une contrainte que vous avez à gérer vous-même.
Nonethess, selon votre modèle, il pourrait être une bonne idée d'utiliser ce champ comme vous le
hash_key
ou envisager d'utiliser unrange_key
Si ce n'est pas possible, je vous conseille de normaliser vos données. Vous avez actuellement quelque chose comme:
UserTable
hash_key
:user_id
e-mail
Pour assurer l'unicité, ajouter une nouvelle table avec ce schéma:
EmailUser
hash_key
: e-mailuser_id
Pour vous assurer une adresse e-mail est unique, il vous suffit d'émettre un
GetItem
àEmailUser
avant.Ce type de normalisation est assez commun avec les bases de données SQL.
e-mail
la range_key, vous permettra seulement un user_id d'avoir plusieurs uniques e-mail. Ce n'est pas ce que vous voulez faire. Si vous ne pouvez pas utiliser l'adresse e-mail que le user_id, vous aurez besoin de normaliser vos données. J'ai mis à jour ma réponse avec une voie possible pour atteindre votre objectif.User
de hachageGUID
et une tableEmail
de hachageemailAddress
. Sinon, comme vous l'avez dit, un index secondaire global sur une adresse de courriel en tant que secondaire dans unUser
tableau ne serait pas appliquer l'unicité.