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

数据库积分表中的积分字段入账出账设计疑问

  •  
  •   lepig · 2020-03-25 12:19:36 +08:00 · 1817 次点击
    这是一个创建于 1704 天前的主题,其中的信息可能已经有所发展或是发生改变。

    需求很简单,下单后给当前用户增加积分,所以有这么一个表

    hqOJ.png

    其中 points 字段为入账积分或者是出账积分,取决于type字段。1为入账,2为出账

    今天看到一个业务上的表,需求也是积分的入账和消费,但是其设计如下

    PVak.png

    可以看到,减少了type字段,使用了负数的形式。突然觉得这样更加直观明了。 所以想请教下大家说说自己的看法。2 种设计有没有潜在的坑。

    大家更倾向于哪一种。

    6 条回复    2020-03-26 14:40:11 +08:00
    MorningBOBO
        1
    MorningBOBO  
       2020-03-25 14:19:02 +08:00
    倾向第一种
    changwei
        2
    changwei  
       2020-03-25 17:04:58 +08:00
    第一種設計更好,因為如果以後需求有變化,例如要篩選所有入賬數據,那麼業務代碼中寫 where point<0 比 where type=1 的效率是更差的( type 使用 bool 類型,對 type 做索引所佔用的硬盤空間要比對類型為 int 的 points 小)
    aliipay
        3
    aliipay  
       2020-03-25 18:39:13 +08:00
    @changwei 虽然我觉得第一张好,但是理由上不太认同:索引上 bool 相比 int 带来的优势非常非常小,而且考虑扩展性,type 不能定义为 bool,因为积分操作能为下单增加,其它活动增加,消费减少,下单取消减少等等非常多。
    如果两种方案结合下,即 type 表示操作类型,points 正负表示积分增减,是否鱼与熊掌兼得?
    lepig
        4
    lepig  
    OP
       2020-03-25 21:03:16 +08:00
    @aliipay 感谢回复。 如果两种都要感觉有点多此一举。其实我的考虑也是和 @changwei 一样。牵扯到大于小于是不是索引效率会比 type=1 type=2 这样稍微慢。
    123444a
        5
    123444a  
       2020-03-26 01:27:29 +08:00 via Android
    建议第二种,需求变就加字段好了,正负还是不需要变啊,加 10 万个需求都成
    lepig
        6
    lepig  
    OP
       2020-03-26 14:40:11 +08:00
    @aliipay 今天看了一下觉得您说的挺有道理的。昨晚脑袋有点懵 没仔细看。谢谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2554 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:36 · PVG 10:36 · LAX 18:36 · JFK 21:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.