繁体   English   中英

DynamoDB - 如何指定不是主键的唯一字段?

[英]DynamoDB - How to specify UNIQUE field that is not a PRIMARY key?

大多数数据库允许定义不是 PRIMARY KEY 的 UNIQUE 键(唯一字段),但 DynamoDB 似乎不支持唯一键定义。

例如,model SampleModelid字段定义为 PRIMARY KEY ( id = UnicodeAttribute(hash_key=True) )。 如果另一个字段(比如说name )也必须定义为唯一的怎么办? 鉴于 DynamoDB 不提供唯一字段规范,并且只允许一个 PK ( hash_key=True ) - 如何将name定义为 UNIQUE?

正如您已经看到的那样,DynamoDB 中没有对此的直接支持。

如果此名称属性在您编写后是不可变的,您可以执行以下操作:

您可以创建第二个 DynamoDB 表,该表只有一个分区键(分区键 = 主键)并将每个名称存储在那里。 当您将项目添加到第一个表时,您使用事务并在第二个表中单独插入,该表的键条件不存在。 如果此事务失败,您试图将名称已存在于表中的项目放入表中。 如果交易通过,您就插入了一个新的唯一名称。

这将为第二个表和事务产生额外的成本,并且仅适用于这个狭窄的用例。

DynamoDB 不是为这种模式构建的,以另一种方式强制唯一性。

您从必须唯一的任何值(在同一个表或第二个表中)创建一个 PK,并使用事务在插入时强制执行它。

https://aws.amazon.com/blogs/database/simulating-amazon-dynamodb-unique-constraints-using-transactions/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM