Ali*_*Ali 38 unique-constraint amazon-dynamodb
在dynamodb中,如果你想在主键之外的字段中强制执行唯一性(就像你有一个用户表并希望用户使用唯一的电子邮件地址而主键是用户ID是一个数字)有其他方法扫描该表以查看该电子邮件是否已被使用?
yad*_*taf 33
简答:不.
DynamoDB是一个关键:价值存储.它非常适合快速检索/保存项目,因为它做了一些妥协.这是你必须自己处理的约束.
Nonethess,根据您的实际模型,使用此字段hash_key
或考虑使用a 字段可能是个好主意range_key
如果无法做到这一点,我建议您对数据进行去标准化.你现在有类似的东西:
UserTable
hash_key
: user_id
e-mail
要确保单一性,请使用此架构添加新表:
EmailUser
hash_key
:电子邮件user_id
要确保电子邮件是唯一的,只需GetItem
向EmailUser
之前发出一个.
这种去规范化在No-SQL数据库中很常见.
小智 7
没有这样的方法可以强制其他属性的唯一性,但是使用 python 的 boto3 库,您可以使用客户端执行事务处理项目并使用一些复合键,并尝试复制您的条目并使用 transact_write_items() 将所有条目插入一次。aws对此有非常好的文档: https://aws.amazon.com/fr/blogs/database/simulated-amazon-dynamodb-unique-constraints-using-transactions/
我认为下面提到的方法没有被讨论或没有讨论,因此发布相关链接以确保唯一的电子邮件(或任何其他属性)。这不需要创建另一个表,而是将其他项目添加到用户表的主键列中。