資料庫設計 - mongodb 如何設計包含收支明細的資料庫?
阿神
阿神 2017-04-21 11:19:13
0
1
872
  • 用一個集合還是分成兩個集合?
  • 如果用一個集合,收和支裏包含的不同類型的數據怎麼處理?
  • 如果分成兩個集合,要顯示收支明細,怎麼查詢?
阿神
阿神

闭关修行中......

全部回覆(1)
巴扎黑

直觀的想法:

  • 如果用一個collection的話,那麼每個document裡面需要有一個字段標識該document類型是收入明細還是支持明細;
  • 如果用2個collection的話,顯示收支明細的時候,就需要透過兩次查詢分別查詢所得collection和支出collection,再合併顯示;

針對你問題中不是很具體的需求,再細緻分析一下:

  • 對於一個collection的話,每個收支記錄都是一個document放到collection,至於不同類型的數據,document是free schema的,在數據存儲上是完全沒有問題滴;你糾結的只是針對收支不同類型的資料的如何處理展示,這需要你很好地定義收支明細的資料結構和各欄位組成。對於查詢,一個collection就很容易,完全可以根據時間來查詢,然後在結果中根據標識收支類型的欄位來分別處理顯示;
  • 對於分成2個collection的話,收支不同類型的數據完全不是問題,因為你分開存儲,此時的collection基本上就是關係db中的2個不同table,各放各的數據,互不干擾;對於查詢的話,就比較麻煩點,一般的話,需要先按照時間從mongodb中分2次拉出收入明細和支出明細,然後按照時間順序把二者進行歸併排序,此時排序的工作量從mongodb轉移到應用端。

二種方案各有各的利弊,如果你的資料量不是很大,建議採用第一種方案,一個collection存放,訪問操作方便;如果資料量很大,可採取第二種方案,將壓力轉移到應用端,畢竟應用的擴充功能相比資料庫的擴充還是方便些。

個人意見建議採用第一種方案,用一個collection存放,對於資料量不大,沒有壓力;如果資料量很大的情況,可依時間將不同時間段的收支明細分別存入多個collection,在前端展示的時候,就按照時間段來展示。這樣的話,隨著時間增長,只需要水平增加collection,資料存取的程式碼都無需改動,在查詢的時候,只是需要根據查詢時間段簡單切換不同的collection即可,簡單且有效率。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板