2011-11-14 48 views

回答

26

MongoDB的背後的想法是,以消除(或至少最小化)的關係數據。您是否考慮將考勤數據直接嵌入每個學生記錄?這實際上是MongoDB的首選設計模式,可以帶來更好的性能和可伸縮性。

如果您確實需要高度關係和規範化的數據,您可能需要重新考慮使用MongoDB。

+0

謝謝你的回答。我的教練給了我這個項目來和MongoDb一起做。所以我會從某處/某些人(比如你:)搜索一些信息),我會盡力去做。再次感謝你。 –

+2

如果你是MongoDB的新手,他們的網站上有一個很酷的小教程:http://www.mongodb.org/(只需點擊「試試看」,然後在shell中輸入「tutorial」。) –

+1

@MikeChristensen目前,這個建議不再有效。他們可能改變了他們的網站 – Kunok

17

答案取決於你打算如何使用數據。你真的有2個選擇,嵌入考勤表,或鏈接它。有關這些方法的更多詳細信息,請參閱:http://www.mongodb.org/display/DOCS/Schema+Design

對於常見用例,您可能會嵌入此特定集合,因此每個學生記錄都會嵌入一個「考勤」表。這是可行的,因爲出勤記錄不太可能在學生之間共享,並且檢索出勤數據也可能需要學生信息。檢索考勤數據將如此簡單:

db.student.find({ login : "sean" }) 
{ 
    login : "sean", 
    first : "Sean", 
    last : "Hodges", 
    attendance : [ 
    { class : "Maths", when : Date("2011-09-19T04:00:10.112Z") }, 
    { class : "Science", when : Date("2011-09-20T14:36:06.958Z") } 
    ] 
} 
+0

謝謝,我已經開始閱讀Schema Design。 –

0

是的。沒有硬性規定。您必須查看嵌入或引用數據的優缺點。這個視頻肯定會有幫助(https://www.youtube.com/watch?v=-o_VGpJP-Q0&t=21s)。在您的示例中,電話號碼屬性應位於同一張表上(在文檔數據庫中),因爲人員的電話號碼很少發生更改。

相關問題