首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Coding
V2EX  ›  程序员

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

  •  
  •   greatcl · 2017-08-19 16:17:05 +08:00 · 1845 次点击
    这是一个创建于 848 天前的主题,其中的信息可能已经有所发展或是发生改变。
    数据库中需要存储用户积分的流水,有一个变化值的字段,目前有两种方案:
    1. 变化值直接存储正负值的数值
    2. 变化值存正数,再增加一个字段用来标识是增加还是减少
    大家都是怎么做的,比如 v 站的积分记录?

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

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

    1.2 方案对不同的检索过滤方式有不同的性能优势
        5
    zhangmiaoCHN   2017-08-19 17:27:15 +08:00 via iPhone   ♥ 1
    一般来说,数据库列属性越原子越好,所以把第二种方案比较符合范式。
        6
    realpg   2017-08-19 17:36:59 +08:00
    竟然没人说我数学不好 白造了个梗
        7
    watsy0007   2017-08-19 18:41:52 +08:00   ♥ 1
    看业务呀。如果简化到只有这么点约束,1 和 2 没区别 ,1 更简单点
    但是通常业务中,积分会对应多种变更方式,不仅仅是+-的。所以是 2
        8
    myliyifei   2017-08-19 19:16:48 +08:00 via Android   ♥ 1
    听说一般财务软件要什么正负对冲,不太专业 有专业人员讲解吗
        9
    dodo20120   2017-08-19 19:22:42 +08:00   ♥ 1
    四柱结算法
        10
    mliilm   2017-08-19 20:04:26 +08:00 via Android
    @realpg 研究了半天,还说没有哪个方案需要两张表啊…
        11
    irockytan   2017-08-19 22:25:09 +08:00 via iPhone
    @realpg 我还在认真理解哪 4 张表,没想到是写错....
        12
    refear99   2017-08-19 22:39:19 +08:00   ♥ 1
    选 2,然后每一行里,再加 2 个字段,记录变更前的值和变更后的值
        13
    greatcl   2017-08-20 09:01:46 +08:00 via Android
    @watsy0007
    有存储变更原因的列
        14
    Hellert   2017-08-20 10:44:56 +08:00   ♥ 1
    可以采用财务标准借贷记帐方法:
    建两个列,增加列(收入)和减少列(支出),根据业务需求写相应列就行了。
    正常积分增减记正数,如果发生记录撤消或冲红的情况,直接相应列记负数。
    好处是一目了然,如果界面上要做 grid 显示,直接列下面做合计。
    统计一段时间积分加减合计,直接那一列 sum 就可以了。
    也便于筛选所有冲红的记录,直接 select 所有值为负数的就可以。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   982 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 25ms · UTC 18:23 · PVG 02:23 · LAX 10:23 · JFK 13:23
    ♥ Do have faith in what you're doing.