当前位置: 首页 > news >正文

系统单据号生成规则推荐

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

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

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

好的单据号规则

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

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

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

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

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

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

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

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

相关文章:

  • Saltstack-4:数据系统grains
  • 脚踏七彩Scala.js,进军前端娱乐圈
  • Failed to lookup provider 'shm' for 'slotmem': is mod_slotmem_shm loaded??
  • Shell命令-线上查询及帮助之man、help
  • 如何设置Apache虚拟域名
  • 总结下我遇到过的接口测试
  • interface和setter,getter
  • python之路---04 列表 元组
  • 学习进度条
  • MongoDB优化与一些需要注意的细节
  • 星际荣耀获鼎晖投资A+轮投资,上半年将进行首枚入轨运载火箭
  • 让人一看就懂的excel相对引用和绝对引用案例解析
  • [bzoj 3534][Sdoi2014] 重建
  • 第13周Python学习周记
  • SpringBoot 项目中使用velocity模板(转载)
  • 【EOS】Cleos基础
  • bearychat的java client
  • JavaScript中的对象个人分享
  • Lsb图片隐写
  • Python - 闭包Closure
  • spring cloud gateway 源码解析(4)跨域问题处理
  • tab.js分享及浏览器兼容性问题汇总
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 简单数学运算程序(不定期更新)
  • 通过git安装npm私有模块
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 鱼骨图 - 如何绘制?
  • 带你开发类似Pokemon Go的AR游戏
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • #git 撤消对文件的更改
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #pragma once
  • (3)nginx 配置(nginx.conf)
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (四) 虚拟摄像头vivi体验
  • (四)Linux Shell编程——输入输出重定向
  • **PHP二维数组遍历时同时赋值
  • .NET MVC 验证码
  • .NET和.COM和.CN域名区别
  • .net生成的类,跨工程调用显示注释
  • .stream().map与.stream().flatMap的使用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • @staticmethod和@classmethod的作用与区别
  • [20190416]完善shared latch测试脚本2.txt
  • [android]-如何在向服务器发送request时附加已保存的cookie数据
  • [CakePHP] 在Controller中使用Helper
  • [Docker]十二.Docker consul集群搭建、微服务部署,Consul集群+Swarm集群部署微服务实战
  • [go 反射] 进阶
  • [iOS]-NSTimer与循环引用的理解
  • [Java并发编程实战] 共享对象之可见性
  • [lesson17]对象的构造(上)
  • [Linux] Apache的配置与运用