CouchDB实体关系

CouchDB实体关系,couchdb,Couchdb,我来自SQL背景,我刚刚开始研究CouchDB 我想了解CouchDB是如何处理多种关系的 在SQL中,我会有一个product表,例如,其中的行包含描述产品的列。例如“ID”、“产品名称”、“说明”、“库存金额”。然后,我将创建一个新的订单表,并按ID将其链接到上述产品表 我知道我可以创建CouchDB订单文档,并在此文档下列出产品及其数据。我看到的问题是,如果我有许多这样的订单,并且我想要编辑描述,那么我需要编辑所有订单文档以反映这些更改 我的问题是,我应该如何进行设计,以便只需更改一个文档

我来自SQL背景,我刚刚开始研究CouchDB

我想了解CouchDB是如何处理多种关系的

在SQL中,我会有一个product表,例如,其中的行包含描述产品的列。例如
“ID”、“产品名称”、“说明”、“库存金额”
。然后,我将创建一个新的订单表,并按ID将其链接到上述产品

我知道我可以创建CouchDB订单文档,并在此文档下列出产品及其数据。我看到的问题是,如果我有许多这样的订单,并且我想要编辑描述,那么我需要编辑所有订单文档以反映这些更改


我的问题是,我应该如何进行设计,以便只需更改一个文档中的数据,它就会反映在包含此产品的订单文档中?

不要将描述存储为订单文档中的字段,只存储产品的id,每次需要带有说明的订单时,您都应该从数据库中获取产品,以检查说明的当前值


如果需要在一个表中显示具有不同产品的大量订单,可以使用“keys”参数在一次查询中查询数据库中的所有产品。它运行得非常快。

您可以将数据存储在多个文档中。然后在查询中使用视图和/或
包含文档
,以包含相关文档/数据。没有一种方法可以在一个事务中更新多个文档,因此构建一个订购系统对于couchdb可能不是一个很好的用途。有一个querystring arg(
all\u或\u nothing=true
),它执行原子操作,但需要注意的是,如果数据很少或已经被索引,它的工作速度很快。索引可能需要一段时间,具体取决于框资源、数据大小和视图复杂性。另外一个好处是:如果您碰巧经常更改视图,并且由于阻塞性质,重新索引会使您死亡,请尝试创建具有适当更改的备份设计视图。它将为这两个视图编制索引,而不会阻塞上一个视图。完成后,将备份中的更改保存到新的设计视图中--没有时间等待索引,也没有时间停止使用视图。谢谢您的回答。使用您描述的方法,我将拥有一个名为Product的文档,其中包含字段“ID”、“Description”和“Price”,例如。然后我会有一个带有字段“ID”、“OrderedBy”、“ProductID”、“Amount”的订单文档?如果我想查看特定顺序中的产品描述,那么我会使用ProductID引用该产品?