2012-04-23 59 views
1

我有两个实体:CouchDB的数据库模型

  1. 公司[companyId(PK)和
  2. 雇员[雇员(PK),companyId(PK,FK)。

反正我可以安排我的文档在CouchDB中,这样我可以使用以下格式($ CouchDB的是URL到我的CouchDB实例)查询雇员?

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

我知道,我们可以在一个数据库中混合使用这两个公司和员工的文件和使用元字段(例如:“_type”)和地图/减少查询我们想要的文件。 “map/reduce”方法没有问题,只需要仔细检查一下,这样我就不会错过任何东西。

非常感谢,

回答

1

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

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

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冲突。