国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

MongoDB一對(duì)多關(guān)系建模

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 15:02:57
文檔

MongoDB一對(duì)多關(guān)系建模

MongoDB一對(duì)多關(guān)系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn
推薦度:
導(dǎo)讀MongoDB一對(duì)多關(guān)系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn

本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1?mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVnM7zYDBceEJhqyQJxPr3FLdcN0tJuRhTrCw%3D%3D 備注:本譯文不

本篇博客翻譯自:

http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1?mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVnM7zYDBceEJhqyQJxPr3FLdcN0tJuRhTrCw%3D%3D

備注:本譯文不是嚴(yán)格意義上的翻譯,只是在基于對(duì)該原文的理解之上,盡可能表達(dá)清楚。如有疑問(wèn)或不妥,請(qǐng)參考原文。

很多剛從傳統(tǒng)SQL開(kāi)發(fā)轉(zhuǎn)向MongoDB開(kāi)發(fā)的朋友都會(huì)問(wèn)到一個(gè)問(wèn)題:如何用MongoDB表達(dá)傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的一對(duì)多(1 to n)關(guān)系?

基于MongoDB豐富的表達(dá)力,我們不能說(shuō)我們必須采用一個(gè)標(biāo)準(zhǔn)的方法來(lái)進(jìn)行1 to n的建模。稍后我們從3個(gè)具體場(chǎng)景來(lái)展開(kāi)講解。

首先,我們將1 to n中的n進(jìn)行場(chǎng)景細(xì)化。這個(gè)n究竟代表多大的量級(jí)呢?是幾個(gè)到幾十個(gè)?還是幾個(gè)到幾千個(gè)?還是成千上萬(wàn)個(gè)?

1) 1 to n(n代表好幾個(gè),或幾十個(gè),反正不太多)

比如每個(gè)Person會(huì)有多個(gè)Address。此種情況下,我們采用最簡(jiǎn)單的嵌入式文檔來(lái)建模。

{ name: 'Kate Monster', id: '123-456-7890', addresses : [ { street: '123 Sesame St', city: 'Anytown', cc: 'USA' }, { street: '123 Avenue Q', city: 'New York', cc: 'USA' } ]}
這種建模的方式包含了顯而易見(jiàn)的優(yōu)點(diǎn)和缺點(diǎn):

優(yōu)點(diǎn):你不需要執(zhí)行單獨(dú)的查詢就可以獲得某個(gè)Person的所有Address信息。

缺點(diǎn):你無(wú)法像操作獨(dú)立文檔那樣來(lái)操作Address信息。你必須首先操作(比如查詢)Person文檔后,才有可能繼續(xù)操作Address。

在本實(shí)例中,我們不需要對(duì)Address進(jìn)行獨(dú)立的操作,且Address信息只有在關(guān)聯(lián)到某一個(gè)具體Person后才有意義。所以結(jié)論是:采用這種embedded(嵌入式)建模是非常適合Person-Address場(chǎng)景的。

2)1 to n(n代表好些個(gè),比如幾十個(gè),甚至幾百個(gè))

比如產(chǎn)品(Product)和零部件(part),每個(gè)產(chǎn)品會(huì)有很多個(gè)零部件。這種場(chǎng)景下,我們可以采用引用方式來(lái)建模,如下:

零部件(Part):{ _id : ObjectID('AAAA'), partno : '123-aff-456', name : '#4 grommet', qty: 94, cost: 0.94, price: 3.99}
產(chǎn)品(Product):
{ name : 'left-handed smoke shifter', manufacturer : 'Acme Corp', catalog_number: 1234, parts : [ // array of references to Part documents ObjectID('AAAA'), // reference to the #4 grommet above ObjectID('F17C'), // reference to a different Part ObjectID('D2AA'), // etc ]}

首先每個(gè)part作為單獨(dú)的文檔存在。每個(gè)產(chǎn)品中包含一個(gè)數(shù)組類(lèi)型字段(parts),這個(gè)數(shù)組中存放的是所有該產(chǎn)品包含的零部件的編號(hào)(_id主鍵)。當(dāng)你需要根據(jù)某一個(gè)產(chǎn)品編號(hào)查詢?cè)摦a(chǎn)品包含的所有部件信息時(shí),你可以執(zhí)行以下操作:

> product = db.products.findOne({catalog_number: 1234}); // Fetch all the Parts that are linked to this Product> product_parts = db.parts.find({_id: { $in : product.parts } } ).toArray() ;
這種建模方式的優(yōu)缺點(diǎn)也非常明顯:

優(yōu)點(diǎn):部件是作為獨(dú)立文檔(document)存在的,你可以對(duì)某一部件進(jìn)行獨(dú)立的操作,比如查詢或更新。

缺點(diǎn):如上,你必須通過(guò)兩次查詢才能找到某一個(gè)產(chǎn)品所屬的所有部件信息。

在本例中,這個(gè)缺點(diǎn)是可以接受的,本身實(shí)現(xiàn)起來(lái)也不難。而且,通過(guò)這種建模,你可以輕易的將1 to n擴(kuò)展到n to n,即一個(gè)產(chǎn)品可以包含多個(gè)部件,同時(shí)一個(gè)部件也可以被多個(gè)產(chǎn)品所引用(即同一部件可以被多個(gè)產(chǎn)品使用)。

3)1 to n(這個(gè)n代表很大的數(shù)值,比如成千上萬(wàn),甚至更大)

比如,每一個(gè)機(jī)器(host)會(huì)產(chǎn)生很大數(shù)量的日志信息(logmsg)。在這種情況下,如果你采用嵌入式建模,則一個(gè)host文檔會(huì)非常龐大,從而輕易超過(guò)MongoDB的文檔大小限制,所以不可行。如果你采用第二中方式建模,用數(shù)組來(lái)存放所有l(wèi)ogmsg的_id值,這種方式同樣不可行,因?yàn)楫?dāng)日止很多時(shí),即使單單引用objectId也會(huì)輕易超過(guò)文檔大小限制。所以此時(shí),我們采用以下方式:

機(jī)器(hosts):{ _id : ObjectID('AAAB'), name : 'goofy.example.com', ipaddr : '127.66.66.66'} 日志(logmsg):{ time : ISODate("2014-03-28T09:42:41.382Z"), message : 'cpu is on fire!', host: ObjectID('AAAB') // Reference to the Host document}
我們?cè)趌ogsmg中,存放對(duì)host的_id引用即可。

綜上所述,在對(duì)1 to n關(guān)系建模時(shí),我們需要考慮:

1)n代表的數(shù)量級(jí)很小,且n代表的實(shí)體不需要單獨(dú)操作時(shí),可以采用嵌入式建模。

2)n代表的數(shù)量級(jí)比較大,或者n代表的實(shí)體需要單獨(dú)進(jìn)行操作時(shí),采用在1中用Array存放引用的方式建模。

3)n代表的數(shù)量級(jí)非常大時(shí),我們沒(méi)有選擇,只能在n端添加一個(gè)引用到1端。

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

MongoDB一對(duì)多關(guān)系建模

MongoDB一對(duì)多關(guān)系建模:本篇博客翻譯自: http://blog.mongodb.org/post/87200945828/6-rules-of-thumb-for-mongodb-schema-design-part-1mkt_tok=3RkMMJWWfF9wsRonsq7Ldu%2FhmjTEU5z14uUsUKGxhokz2EFye%2BLIHETpodcMTcVn
推薦度:
標(biāo)簽: 博客 關(guān)系 建模
  • 熱門(mén)焦點(diǎn)

最新推薦

猜你喜歡

熱門(mén)推薦

專(zhuān)題
Top
主站蜘蛛池模板: 亚洲国产精品免费视频 | 亚洲欧美视频一区二区三区 | 精品亚洲一区二区三区 | 亚洲一区中文字幕在线 | 欧美特黄一区二区三区 | 最新国产小视频在线播放 | 亚洲十欧美十日韩十国产 | 久久国产精品一区二区 | 成人毛片一区二区三区 | 国产在线观看第一页 | 欧美亚洲日本国产 | 国产高清精品一级毛片 | 香港经典a毛片免费观看…伊人色综合久久 | 国产精品va在线观看无 | 91发布页| 亚洲综合欧美日韩 | 久久久影院亚洲精品 | 国产精品久久久久久一区二区 | 亚洲欧洲在线观看 | 中文字幕久久久久一区 | 日韩高清dvd | 亚洲精品综合久久中文字幕 | 国产精品毛片在线直播完整版 | 中文字幕版免费电影网站 | 欧美精品aaa久久久影院 | 国产成人一区二区三区小说 | 精品在线一区 | 日韩一区二区三区不卡 | 一区二区成人国产精品 | 欧美 日韩 中文字幕 | 最新欧美日韩 | 欧美va在线 | 国产高清精品一区 | 国内精品久久久久久久97牛牛 | 国产成人久久精品区一区二区 | 亚洲专区路线一路线二天美 | 欧美日韩不卡视频一区二区三区 | 国产欧美一区二区三区精品 | 九九51精品国产免费看 | 国产欧美综合在线观看第七页 | 一区二区三区欧美日韩 |