如何设置包含唯一键的字段

时间:2014-02-03 15:47:13

标签: couchdb unique-key document-database

我想在CouchDB文档中保存数据,因为我习惯在RDBMS中执行此操作。我想创建一个只能在数据库中包含唯一值的字段。如果我现在保存文档并且已经有一个包含唯一键的文档,我预计CouchDB会出错。

我想我可以使用文档ID并用我的值替换自动生成的doc-id,但有没有办法将其他字段设置为唯一密钥持有者。关于唯一键的任何最佳实践?

2 个答案:

答案 0 :(得分:2)

正如您所说,生成的_id被强制为唯一。这是CouchDB中唯一真正的唯一约束,有些人将它用于自己的应用程序。

但是,这仅适用于单个CouchDB实例。一旦开始引入复制和其他实例,如果在多个节点上生成相同的_id,则可能会遇到冲突。 (取决于您生成_id的方式,这可能是也可能不是问题)

答案 1 :(得分:1)

正如多米尼克所说,_id是唯一几乎可以确保独特的参数。有一件事是肯定的,你必须以不同的方式设计你的“数据库”。请记住,_id将是数据库范围的。您将只能拥有一个包含此_id的文档。

_id必须是字符串,这意味着您不能拥有数组或数字或其他任何内容。

如果您想要公开访问权限,则必须考虑如何以不会弄乱系统的方式生成您的ID。

我想出了那样的ids:

"email:email@example.com"

在我的特定情况下,它可以防止人们在同一封电子邮件中创建多个身份验证。但正如Documinic所说,如果你有多个主人,你将不得不考虑可能的冲突。