2011-08-25 70 views
1

我對NoSQL非常陌生,我試圖圍繞它進行思考。作爲一個例子,我試圖爲一個簡單的博客設計架構,該博客的作者有帖子,有評論。像這樣:MongoDB:嵌入式文檔的高效模式設計

Author 
name : String, 
email : String, 
posts : [Post] 

Post 
title : String, 
body : String, 
comments : [Comment] 

Comment 
commenter : String, 
comment : String 

所以這似乎是設計模式的最不規範化的方式。當我想要獲取作者帖子列表時,它非常有用,但是當我嘗試通過標題查詢帖子時遇到問題。這將返回作者對象和所有作者的帖子。然後,我可以搜索我想要的帖子,但這似乎效率低下。

什麼是處理這種模式的最有效方法?我是否應該只有Posts對象,並在Post對象中爲作者創建一個字段(或嵌入式文檔)?或者,最好將數據存儲在多個位置?

我花了這麼多年來試圖規範化關係數據庫,我似乎無法用NoSQL的方式來思考。任何意見,將不勝感激。

回答

0
Post 
title: String 
author: String 
comment: String 
posted: Date 

Author 
name: String 
email: String 

如果你的模型的「核心」這裏是交那麼爲什麼不讓它如此,一號。您可以按標題,按作者和按日期搜索帖子。

0

非規範化並不意味着外鍵被禁止。

我想你應該肯定有一個Id的作者參考。但是,這是反規範化進來的地方,您希望將作者名稱存儲在Post對象中的Author中。這樣,您不需要加入AuthorPost集合。

Post 
    title: string 
    body: string 
    authorName: string 
    authorId: [id of author] 
    comments: list of [Comment] 
    created: date 
    modified: date 

Author 
    name: string 
    email: string 

Comment 
    subject: string 
    body: string 
    author: string (if you want anon comments)