[咨询] 数据库中对账户变更值的存储方式

2017-08-19 16:17:05 +08:00
 greatcl
数据库中需要存储用户积分的流水,有一个变化值的字段,目前有两种方案:
1. 变化值直接存储正负值的数值
2. 变化值存正数,再增加一个字段用来标识是增加还是减少
大家都是怎么做的,比如 v 站的积分记录?

两种各有什么好处呢,现在想的是第一种比较方便简单一些。
2965 次点击
所在节点    程序员
14 条回复
shenjixiang
2017-08-19 16:23:25 +08:00
一般的做法是第二种
greatcl
2017-08-19 16:24:55 +08:00
@shenjixiang
这样对比第一种的优点是什么呢?需要区分增加减少时通过正负数不就可以区分了吗?
shenjixiang
2017-08-19 16:35:32 +08:00
对账的时候捞取数据方便吧,数据量大了也好加索引
realpg
2017-08-19 16:37:42 +08:00
一般来说 这种模型 我都是四个表
1. 当前余额表
2. 楼主 1 方案
3. 楼主 2 方案

主要需要照顾统计和筛选时候的性能

1.2 方案对不同的检索过滤方式有不同的性能优势
zhangmiaoCHN
2017-08-19 17:27:15 +08:00
一般来说,数据库列属性越原子越好,所以把第二种方案比较符合范式。
realpg
2017-08-19 17:36:59 +08:00
竟然没人说我数学不好 白造了个梗
watsy0007
2017-08-19 18:41:52 +08:00
看业务呀。如果简化到只有这么点约束,1 和 2 没区别 ,1 更简单点
但是通常业务中,积分会对应多种变更方式,不仅仅是+-的。所以是 2
myliyifei
2017-08-19 19:16:48 +08:00
听说一般财务软件要什么正负对冲,不太专业 有专业人员讲解吗
dodo20120
2017-08-19 19:22:42 +08:00
四柱结算法
mliilm
2017-08-19 20:04:26 +08:00
@realpg 研究了半天,还说没有哪个方案需要两张表啊…
irockytan
2017-08-19 22:25:09 +08:00
@realpg 我还在认真理解哪 4 张表,没想到是写错....
refear99
2017-08-19 22:39:19 +08:00
选 2,然后每一行里,再加 2 个字段,记录变更前的值和变更后的值
greatcl
2017-08-20 09:01:46 +08:00
@watsy0007
有存储变更原因的列
Hellert
2017-08-20 10:44:56 +08:00
可以采用财务标准借贷记帐方法:
建两个列,增加列(收入)和减少列(支出),根据业务需求写相应列就行了。
正常积分增减记正数,如果发生记录撤消或冲红的情况,直接相应列记负数。
好处是一目了然,如果界面上要做 grid 显示,直接列下面做合计。
统计一段时间积分加减合计,直接那一列 sum 就可以了。
也便于筛选所有冲红的记录,直接 select 所有值为负数的就可以。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/384195

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX