搜尋

首頁  >  問答  >  主體

資料庫設計 - mongodb 如何設計包含收支明細的資料庫?

阿神阿神2803 天前885

全部回覆(1)我來回復

  • 巴扎黑

    巴扎黑2017-04-21 11:21:13

    直觀的想法:

    • 如果用一個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即可,簡單且有效率。

    回覆
    0
  • 取消回覆