2015-09-27 105 views
0

在閱讀文章http://blog.mongodb.org/post/88473035333/6-rules-of-thumb-for-mongodb-schema-design-part-3章節:「經驗法則:您的彩虹指南」我遇到過這樣的話:嵌入和反規範化。反規範化意味着什麼?

一:有利於嵌入,除非有令人信服的理由不

五:考慮寫/非規範化當讀取率。一個主要被讀取並且很少更新的字段是非規範化的一個很好的候選者:如果你非規範化一個經常更新的字段,那麼額外的查找和更新所有實例的工作可能會壓倒從非規範化中獲得的節省。

我知道嵌入是嵌套文件,而不是寫單獨的表/集合。

但我不知道什麼denormalizing手段。

回答

2

反規範化與normalization相反,這是設計像MySQL這樣的關係數據庫的一個很好的實踐,您可以將一個邏輯數據集分解爲多個獨立的表以減少冗餘。

由於MongoDB不支持表的聯接,所以如果屬性讀取頻繁且更新不足,則您可以將屬性複製到兩個集合中。

EG:您希望將數據保存有關一個人,要保存人的性別:

在SQL數據庫中,你會創建一個表的人,一張桌子性別,存儲兩性的外鍵在人員表中輸入ID並執行連接以獲取完整信息。這種「男性」和「女性」只存在一次價值。

在MongoDB中,你將節省的性別中的每個人,值「男性」和「女性」可以存在多個次,但查找速度更快,因爲數據是在集合中的一個對象緊密耦合。

+0

這是否意味着性別只能在人身上或獨自生活? – Jamie

+1

在網上存在非規範化的網上性別,而不是針對其自己。如果你想在其他地方使用它,你也必須在那裏創建它。 – Simulant