我想使用Couchbase noSQL数据库。但是,我对使用Referenced和Embedded文档的文档结构感到困惑。
我有三个实体。
预约
预约发票。
发票的付款明细。 (一对多)
那么,我应该使用哪种文档结构?为什么?
答案 0 :(得分:1)
这绝对是一个非常广泛的问题,没有"对"回答。您需要考虑您的访问模式(即,您通常如何编写和检索数据)以及您已经布置的数据结构。
作为一个例子,我认为完全有可能所有这些都可以在一个文件中集合在一起:
key: appointment::123
{
"date": "2018-01-29",
"place": "123 main st",
"invoice": {
"date": "2018-01-30",
"due": "2018-02-28",
"items": [
{ "desc": "widget", "quantity": 2, "price":3.99 },
{ "desc": "foo", "quantity": 1, "price":24.99 },
{ "desc": "bar", "quantity": 3, "price":5.00 }
]
}
您的问题标有CouchDb和Couchbase,因此我不确定您打算使用哪个。但是,如果您使用Couchbase,我知道您可以使用subdocument operations(从Couchbase Server 4.5开始)。也就是说,如果您只需要文档的部分,则不必每次都检索整个文档。随着文档越来越大,这可能会有所帮助。我不知道CouchDb中是否有同样的东西(它可能被称为不同的东西)。此外,Couchbase具有完整的SQL实现,因此无论您最终使用哪种型号,都可以查询数据。