系统单据号生成规则推荐

对订单类系统而言,单据号是非常重要的东西。一个好的单据号组成往往应该包含丰富的元素,利于问题的调查,业务的扩展。

这里列举几种不好的单据号范例:

  • 单纯的数字递增: 001, 002, 003 //无业务含义
  • UUID//无业务含义,且无顺序概念
  • 日期+用户ID//当天同一用户发生两笔业务时可能重复

好的单据号规则

系统标识日期sequence空间
表示当前单据号是属于哪个系统的,比如001表示支付系统,002表示团购系统表示这笔单据是发生在哪一天的,yyyyMMdd格式字符串可放8位数字,支持一亿的sequence,值可以来自当前表的主键ID,不满8位的左边统一补0,这个保证了最终的唯一性

如果当前系统有子单据概念,比如订单系统里还有物流单的概念,则可以加入子业务单标识

系统标识日期子业务单标识sequence空间
--001表示物流单,002表示退款单-

如果你的数据库是分库分表的,则强烈建议在单据号中加入分库分表位,将有很大的收益

系统标识日期分库分表位sequence空间
--0102表示01库的02号表-

总之好的单据号可以获得如下收益:

  • 根据单据号马上可以知道这个来自哪个系统,发生在哪一天
  • 在这个系统中属于具体哪一个子业务
  • 这笔单子是属于哪个库哪个表的
  • 在程序中只要你能获得单据号,就能通过截取的方式获得很多有价值的信息,便于逻辑的处理。久而久之你会不自主让单据号贯穿整个系统,也乐意在日志中打印,将极大方便你解决问题
  • 当整个系统群都遵守统一的标准时,你会发现当进入任意一个新系统时,只要给你这个系统的单据号则你都能快速定位日志,代码,数据库表,非常利于学习

让我们拥抱好的单据号生成习惯吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值