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

2020-03-25 12:19:36 +08:00
 lepig

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

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

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

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

大家更倾向于哪一种。

1658 次点击
所在节点    程序员
6 条回复
MorningBOBO
2020-03-25 14:19:02 +08:00
倾向第一种
changwei
2020-03-25 17:04:58 +08:00
第一種設計更好,因為如果以後需求有變化,例如要篩選所有入賬數據,那麼業務代碼中寫 where point<0 比 where type=1 的效率是更差的( type 使用 bool 類型,對 type 做索引所佔用的硬盤空間要比對類型為 int 的 points 小)
aliipay
2020-03-25 18:39:13 +08:00
@changwei 虽然我觉得第一张好,但是理由上不太认同:索引上 bool 相比 int 带来的优势非常非常小,而且考虑扩展性,type 不能定义为 bool,因为积分操作能为下单增加,其它活动增加,消费减少,下单取消减少等等非常多。
如果两种方案结合下,即 type 表示操作类型,points 正负表示积分增减,是否鱼与熊掌兼得?
lepig
2020-03-25 21:03:16 +08:00
@aliipay 感谢回复。 如果两种都要感觉有点多此一举。其实我的考虑也是和 @changwei 一样。牵扯到大于小于是不是索引效率会比 type=1 type=2 这样稍微慢。
123444a
2020-03-26 01:27:29 +08:00
建议第二种,需求变就加字段好了,正负还是不需要变啊,加 10 万个需求都成
lepig
2020-03-26 14:40:11 +08:00
@aliipay 今天看了一下觉得您说的挺有道理的。昨晚脑袋有点懵 没仔细看。谢谢

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

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

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

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

© 2021 V2EX