我正在使用Couchbase Lite数据库作为我所知道的无模式项目,我很满意那个,因为它解决了我的问题,但它引发了一个与NoSQL(文档数据库)中的主键约束相关的问题。
众所周知,所有Schema Database都将在表中表示,这些表可能有也可能没有primary / forgien密钥。例如,假设我有一个名为Student的表,其主键为usn(大学座位号),以及其他属性,名字,姓氏,地址,联系人编号等。
usn |名字|姓氏|地址| contactnumber
2BA11CS409 | abc | mnq |班加罗尔| 1234567890
2BA11CS410 | xyz | PQR |孟买| 1234567809
如果我再次尝试添加2BS11CS409值,表中将会出现错误说明违反主键约束(无法添加重复键)。
但是文档数据库中的情况如何,它将如何识别文档中的唯一值
docID:123456789zxcv
{
usn : 2BA11CS409,
firstname : abc,
.......
....... etc
}
我知道每个文档都有一个唯一的Id,其密钥被编入索引以便在数据库中搜索,但是我创建的另一个文档具有与上面相同的值,
docID:zxcv123456789
{
usn : 2BA11CS409,
firstname : abc,
last
....... etc
}
当我尝试使用usn访问一个数据库时,它只需要返回一个文档,但它会返回两个文档可能相同或不同。
我需要知道文档数据库中的主要/唯一密钥类型的概念,它存在于Relational数据库中。或者您可以将我重定向到一些文章
谢谢。
答案 0 :(得分:0)
好吧,架构或没有架构的唯一键约束始终使用索引,大多数RDB的优势在于它们为您提供此服务,如果是couchbase,您需要自己完成。基本上你有第二个集合,代表索引。每次要在标准集合中插入时,只需先检查索引是否存在要插入usn
的文档,如果它没有将文档插入正常集合中。然后使用docId=usn
将文档插入到索引中,如果需要,可以插入对插入到普通集合中的文档的docID的引用。