今天讀了篇文章,關於mongodb裏,一對多模式下的schema設計方案,感覺說的挺清晰,所以分享一下。原鏈接:
https://www.mongodb.com/blog/post/6-rules-of-thumb-for-mongodb-schema-design-part-1
問題:
數據庫設計中,數據之間的引用不可避免,其中常見的模式就是一對多。舉個例子:
Person和Addresses
Person是一個對象,地址是一個對象,一個Person可以有若干個地址。
方案:
原文作者提到了三種設計方案,以及設計原則:
1,One-to-Few(一對有限數量的多)
例如上例中的Person和Address,一個Person基本只有少數量的居住地址,並且在很大程度上,沒有單獨讀取Address對象的需求(也就是說是否有必要單獨建立一個adress的表格),這種情況下采用嵌入式模式(embedding):
2,One-to-Many(一對千量級的多)
例如Product(產品)和Part(配件),一個產品,例如汽車,可以有數百個配件,而且配件通用性,也導致有需求單獨對於配件進行查詢,所以考慮到數量和應用,這種情況下適合採用child reference(在Product中添加引用數組)
Part:
Product:
3,One-to-Squillions(一對無數)
例如分佈式系統的日誌,每個機器(Host)會產生大量的日誌記錄(record),這種情況不適合child reference,也就是說,引用數組的長度無法控制,很可能越界,所以這種情況下適合採用parent reference(在每條record中,添加一個反向引用,指向Host)
Host
Record