訂單號的設計

訂單號的由來

對於通常的數據而言,表的設計,就一個主鍵。
可是,對於訂單數據來講,除了流水號這個主鍵以外,還有一個訂單號。
流水號,供系統內部使用,即供技術層面使用。
訂單號,供系統外部使用,是給人看的。html

訂單號的應用場景

1.電商行業
2.支付行業
3.物流行業數據庫

如何設計訂單號

流水號,做爲主鍵,和其餘主鍵同樣,只要保證惟一性便可,具體實現方法,通常是採用數據庫序列號遞增的設計。segmentfault

訂單號,因爲是給人(用戶、售後、運營等)看的,因此,與流水號相比,就多了兩點要求:
1.可讀性
2.安全性緩存

可讀性
訂單包含一些基本信息,方便人閱讀,這個很少說。安全

安全性
在可讀性的基礎之上,還要確保數據的安全性,即不能讓人看出來訂單的交易量。.net

總結
流水號,只要確保惟一性便可。線程

訂單號,須要考慮如下3點要求:
1.惟一性
2.可讀性
3.安全性設計

技術實現

1.對於能夠拿到用戶id的狀況,訂單號生成規則以下:htm

  • 時間戳
  • 用戶id/商家id
  • 隨機數字

用戶id,泛指可以惟一標識當前用戶的id。最好是公開的、非隱私的數據,如商家號。blog

若是須要對用戶id進行保密,那麼能夠對用戶id進行hash。

2.對於拿不到用戶id(例如,能拿到商家id可是拿不到用戶id)的狀況,使用更復雜的生成規則:

  • 時間戳
  • 商家id
  • 隨機數字

    隨機數字 + 緩存 //能夠確保惟一性
  • 進程id/線程id
    確保當前請求的惟一性
  • 流水號
    流水號惟一,但要防止泄露交易量
  • 其餘……

總結
生成規則最重要的一點是,保證當前請求的惟一性。

參考

https://segmentfault.com/q/10...

http://www.jianshu.com/p/331b...
https://www.biaodianfu.com/sn...

http://www.yours1989.com/76/

http://blog.csdn.net/qq_32532...

相關文章
相關標籤/搜索