2014-03-30 46 views
2

我不知道如何在mongoDB中構建這個數據庫。 entity relational model recipe database構造mongoDB對象數據庫

因爲我的關係型數據庫的背景,我相信這些數據庫將結構是這樣的:
2集:

  1. 用戶
    • 基本道具包括_id
  2. 食譜
    • 如標題,配料等相關信息
    • 用戶文檔的參考

如果我只是扔來自用戶的_id(或使用適當DBRef)到uploaded_by場對於食譜來說,做類似連接的操作是非常困難的。 具體而言,我需要獲取所有食譜的用戶名。我會返回一個對象數組這種格式:

{title:'chocolate chip cookies', 
desc:'yummy soft cookies', 
uploaded_by:'john doe'} 

要做到這一點,我會已經做了查詢每個配方找到然後根據用戶參考的名稱,然後返回具有用戶名稱的自定義對象和其他信息?這聽起來太昂貴了,讓我覺得我應該堅持關係數據庫。有沒有更有效的方法來做到這一點?

+0

我看到的一個解決方案是將用戶的名稱存儲在'uploaded_by'字段中。這樣我就不需要第二個查詢來獲取上傳者的名字。我不喜歡這個解決方案,因爲它缺少關係數據庫的持久性。 – ChrisU

回答

2

Chris,

你的想法是我建議你做的。

的mongodb的動力來自具有非規範化數據(相對於歸一化的數據,其中目標是最小化冗餘)。當你查詢mongo的數據時,你只需要查詢一次數據庫,並找回你需要的一切。如果您需要將數據分散到多個集合中(至少沒有我知道的有效方法),那麼在MongoDB中沒有辦法做到這一點。我認爲你應該考慮在你的食譜集合中包含上傳者的格式化名/姓(如你已經結束)中的「uploaded_by」字段。您還需要爲每個用戶(例如uploaded_recipes)提供一個字段,其中包含每個用戶上傳的配方的標識符(或標識符集合)。這樣,您就不需要對數據進行連接。這將是設置數據庫的「mongodb方式」。

要解決持久性問題,處理用戶名變化的過程需要以不同的方式處理。實現用戶文檔更改的過程還必須更新用戶上傳的每個配方(您遍歷該用戶的uploaded_recipes字段)的「uploaded_by」字段。這裏的想法是,爲插入過程增加了複雜性,以簡化和改進對數據庫的查詢。