系統單據號生成規則推薦

對訂單類系統而言,單據號是很是重要的東西。一個好的單據號組成每每應該包含豐富的元素,利於問題的調查,業務的擴展。數據庫

這裏列舉幾種很差的單據號範例:學習

  • 單純的數字遞增: 001, 002, 003 //無業務含義
  • UUID//無業務含義,且無順序概念
  • 日期+用戶ID//當天同一用戶發生兩筆業務時可能重複

好的單據號規則日誌

系統標識 日期 sequence空間
表示當前單據號是屬於哪一個系統的,好比001表示支付系統,002表示團購系統 表示這筆單據是發生在哪一天的,yyyyMMdd格式字符串 可放8位數字,支持一億的sequence,值能夠來自當前表的主鍵ID,不滿8位的左邊統一補0,這個保證了最終的惟一性

若是當前系統有子單據概念,好比訂單系統裏還有物流單的概念,則能夠加入子業務單標識字符串

系統標識 日期 子業務單標識 sequence空間
- - 001表示物流單,002表示退款單 -

若是你的數據庫是分庫分表的,則強烈建議在單據號中加入分庫分表位,將有很大的收益table

系統標識 日期 分庫分表位 sequence空間
- - 0102表示01庫的02號表 -

總之好的單據號能夠得到以下收益:擴展

  • 根據單據號立刻能夠知道這個來自哪一個系統,發生在哪一天
  • 在這個系統中屬於具體哪個子業務
  • 這筆單子是屬於哪一個庫哪一個表的
  • 在程序中只要你能得到單據號,就能經過截取的方式得到不少有價值的信息,便於邏輯的處理。長此以往你會不自主讓單據號貫穿整個系統,也樂意在日誌中打印,將極大方便你解決問題
  • 當整個系統羣都遵照統一的標準時,你會發現當進入任意一個新系統時,只要給你這個系統的單據號則你都能快速定位日誌,代碼,數據庫表,很是利於學習

讓咱們擁抱好的單據號生成習慣吧!程序

相關文章
相關標籤/搜索