2012-04-23 76 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衝突。