mongodb數據庫設計原則


1.一對很少  one-to-few  可以采用內嵌文檔 

person集合中

{

name:'張三',

age:20,

address:[

{country:"中國"province:"山西省"city:"長治市"}

{country:"中國"province:"山西省"city:"太原市"}

]

}

    優點:不需要單獨執行一條語句去獲取內嵌的內容

    缺點:法把這些內嵌文檔當做單獨的實體去訪問

    適用場合:一對很少且不需要單獨訪問內嵌內容

2.一對許多(但並不是很多) one-to-many  中間引用

person集合

{

_id:ObjectID(12個字節組成)

name:"張三"

age:23

}

人員組集合

{

name:"一組"

persons:[

ObjectID("aaaaa"),

ObjectID("AAABBB")

.....

]

}

適用場合:一對多且多的一端內容因為各種理由需要單獨存在的情況下可以通過數組的方式引用多的一方的。

3.一對非常多 one-to-squillions  父級引用(mongodb每個文檔的最大16M

company集合

{

_id:ObjectID("company01")

name:"可為時代"

}

員工集合

{

name:"張三",

age:23,

company:ObjectID("company01")

}

適用場合:一對非常多的情況下,請將一的那端引用嵌入進多的一端對象中。

4.雙向關聯  在one端和many端同時保存對方的引用

person集合

{

_id:ObjectID("person01"),

name:"張三",

age:23,

group:ObjectID("group01")

}

group集合

{

_id:ObjectID("group01"),

name:"研發一組",

persons:[

ObjectID("person01")

ObjectID("person02")

]

}

優點:具有一對多的所有優點,同時在多的一方,可以很快找到少的一方

缺點:更新時需要同時更新兩個集合中的引用,不能使用原子性

5.反范式

反范式Many-<one :冗余mony端的數據到one端即在one的一方保存mony的引用集合

反范式noe -<many :冗余one端的數據到many端即在many的一方保存one的引用

使用場合:讀比較高,更新比較少的情況(沒有原子性)

 

7.總的設計原則

a.優先考慮內嵌,除非有什么迫不得已的原因。

b.需要單獨訪問一個對象,那這個對象就不適合被內嵌到其他對象中。

c.數組不應該無限制增長。如果many端有數百個文檔對象就不要去內嵌他們可以采用引用ObjectID的方案;如果有數千個文檔對象,那么就不要內嵌ObjectID的數組。該采取哪些方案取決於數組的大小。

d.在進行反范式設計時請先確認讀寫比。一個幾乎不更改只是讀取的字段才適合冗余到其他對象中。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM