Couchbase 中的 Referenced 和 Embedded 文档之间应该使用哪个?

Which should be used between Referenced and Embedded document in the Couchbase?

我想使用 Couchbase noSQL 数据库。但是,我对哪种文档结构使用了引用文档和嵌入式文档感到困惑。

我有三个实体。

  1. 约会

  2. 预约发票。

  3. 发票的付款明细。 (一对多)

那么,我应该使用哪种文档结构,为什么?

这绝对是一个非常广泛的问题,没有 "right" 答案。您需要考虑您的访问模式(即您通常如何写入和检索数据)以及您布置的数据结构。

举个例子,我认为完全有可能将所有这些都放在一个文档中:

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 实现,因此无论您最终使用何种模型,您都可以查询数据。