系统单据号生成规则推荐

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

这里列举几种很差的单据号范例:学习

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

好的单据号规则日志

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

若是当前系统有子单据概念,好比订单系统里还有物流单的概念,则能够加入子业务单标识字符串

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

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

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

总之好的单据号能够得到以下收益:扩展

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

让咱们拥抱好的单据号生成习惯吧!程序

相关文章
相关标签/搜索