CouchDB数据库模型

时间:2012-04-23 07:16:52

标签: api rest couchdb

我有两个实体:

  1. 公司[companyId(PK)]和
  2. 员工[employeeId(PK),companyId(PK,FK)]。
  3. 无论如何,我可以在CouchDB中组织我的文档,以便我可以使用以下格式查询员工( $ CouchDB是我的CouchDB实例的URL )?

    $CouchDB/company/{companyId}/employee/{employeeId}
    

    我知道我们可以将公司和员工文档混合在一个数据库中,并使用元字段(例如:“_ type”)和map / reduce来查询我们想要的文档。 “map / reduce”方法没有任何问题,只是想仔细检查以便我不会遗漏任何内容。

    非常感谢,

2 个答案:

答案 0 :(得分:1)

您可以以这种方式整理文档。我同意,这是一个非常好的布局,但简短的回答是CouchDB不支持。

文档ID(和文档URL) flat 。它们都共享相同的命名空间。另一种说法是文档中的"_id"值必须为其主键。

答案 1 :(得分:0)

虽然with some quirks,但文档_id可以包含/。然后company/COMPANYID/employee/EMPLOYEEID是有效的ID。

我经常使用以下方案来构建文档的_id(我更喜欢_):

EntityName_ENTITYID

使用此_id

  • 我不需要_type字段;
  • 我通过_all_docs?startkey="Company_"&endkey="Company_\fff0";
  • 获得所有公司
  • 我通过_all_docs?startkey="Employee_COMPANYID_"&endkey="Employee_COMPANYID_\fff0";
  • 获得公司内的所有员工
  • 我避免不同实体之间的ID冲突。