Is there a way to enforce unique constraint on a property (field) other than the primary key in dynamodb

Ali picture Ali · Oct 16, 2012 · Viewed 22.7k times · Source

In dynamodb, if you want to enforce uniqueness in a field other than the primary key (like were you have a users table and want unique email addresses for users while primary key is a userid which is a number) is there a way other thans scanning the table to see if the email is already in use?

Answer

yadutaf picture yadutaf · Oct 16, 2012

Short answer: No.

DynamoDB is a key:value store. It is very good at quickly retrieving/saving Items because it does a couple of compromise. This is a constraint you have to handle yourself.

Nonethess, depending on your actual model, it might be a good idea to use this field as you hash_key or consider using a range_key

If this is not possible, I advise you to de-normalize your data. You currently have something like:

UserTable

  • hash_key: user_id
  • e-mail
  • ...

To ensure unicity, add a new table with this schema:

EmailUser

  • hash_key: e-mail
  • user_id

To make sure an e-mail is unique, just issue a GetItem to EmailUser before.

This kind of de-normalization is quite common with No-SQL databases.