搜索

首页  >  问答  >  正文

数据库设计 - mongodb 如何设计包含收支明细的数据库?

阿神阿神2803 天前884

全部回复(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
  • 取消回复