mongodb - mogodb如何進行設計
淡淡烟草味
淡淡烟草味 2017-04-28 09:04:48
0
1
738

想知道大家在做非關係型資料庫的專案時是如何進行設計的,以學生選課為例,每個學生可以選擇多個課程,每個課程可以讓多個學生選擇,這種多對多關係要如何設計,如果我要刪除一個課程,如何保證資料庫的一致性?

淡淡烟草味
淡淡烟草味

全部回覆(1)
仅有的幸福

MongoDB 考慮兩種基本模式:文件和分錶。

文檔模式把一筆記錄記入一個文檔,以學生選課為例,就是在一個學生的文檔下記錄所有他選的課程;分錶模式就是像關係型資料庫那樣,學生和課程分開建表,然後再建一個學生和課程對應關係(選課)的表。

文件的主要優點是讀取效率高,MongoDB 沒有joint,如果分錶,每次查詢涉及幾張表就要做幾次查詢。文檔的主要缺點第一就是維護不便,例如你修改了一個課程的信息,就得找到所有包含這個課程的學生文檔,然後逐個修改。另外一個文檔的大小是有限制的,不能無限增加資料。

分錶的優缺點和文檔式相反。

實務中要權衡選擇,以讀取為主的資料傾向於選擇文檔模式,寫/修改頻率高的資料可以考慮分錶。另外對於可能無限增加資料的字段,通常也要考慮分錶存儲。

一般是二者結合起來用,在文檔中記錄讀取頻率較高的信息,其它細節信息單獨建表。到你這個例子裡,就是學生和課程建兩個表,每個學生文件下記錄選課的基礎資訊(例如課程代碼和名稱),然後每個課程的具體資訊儲存在課程表裡。

當你每次列出一個學生的選課資訊時,一次查詢就可以列出所有選課的代碼和名稱,當需要查看具體一門課程的詳細信息時再對課程表做一次查詢。這樣比完全分錶可以減少一次查詢,比完全文檔記錄減少了文檔的大小和修改課程資訊時要修改的範圍。

如果你要刪除一門課,先在課表裡刪除這門課的文檔,然後在學生表裡找到所有包含這門課的記錄然後修改之。靈活運用索引和操作符,並不是問題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!