Couchbase多对多关系建模

时间:2018-06-25 06:54:04

标签: nosql couchbase data-modeling relationships n1ql

我试图弄清楚如何为我的数据建模-在Couchbase中以多对多的关系(也使用n1ql)。

我有两个实体:客户项目

  • 客户-每个客户可以创建许多项目-每年大约2000个项目。
  • 项目-每个项目可以属于多个客户(最多50个客户)。

我认为可能为每个站点/项目创建一个新文档,但是根据Couchbase有关数据建模的文档:

  

在Couchbase Server中,这通常不是一个好方法,因为   引用和嵌入为   避免创建此冗余文档。

我应该如何存储数据?

任何建议/建议都会有所帮助。

谢谢。

2 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

该引用引用了“关系文档”。就您而言,这意味着您将拥有一个客户文档,一个项目文档以及某种客户-项目映射文档。我同意,除非您打算存储有关该关系的很多信息 ,否则仅对关系的文档 将不是一种有用的方法。

根据您所提供的信息,建议您存储客户端文档和项目文档。根据数字,我想说这些项目应包含一个客户文档ID列表。

类似的东西:

key client::001
{
   "name" : "Clienty McClientface",
   "address" : "123 main st",
   "foo" : "bar",
   "type" : "client"
}

key project::001
{
    "name" : "Alan Parsons Project",
    "startDate" : "2012-09-27",
    "clients" : [
        "client::001",
        "client::007",
        "client::123",
        // ... etc ...
    ],
    "type" : "project"
}

但通常,这取决于您的用例用于读取,写入和查询。没有哪种数据模型会适合每个用例。