阿里巴巴新零售數據庫設計(簡化版)
語雀地址:https://www.yuque.com/gavincoder/ngs5gi/upkm1p#WXQOv
基礎概念
SPU
Standard Product Unit 標准產品單位
SPU描述一個產品的各種特性
什么時候用到SPU?
想買個ipad,搜ipad .
平台先去產品表搜id,然后再去商品表搜數據
因為產品表SPU數量遠遠小於商品表,這樣可以很快獲得商品信息
SKU
Stock Keeping Unit 庫存進出計量單位
SKU是物理上不可分割的最小存貨單位
庫存字段,理論上應該放到SKU商品表與倉庫表的交叉表內
SKU與權重
SKU與參數如何對應
品類不同,參數不同
采用1對多的數據結構
新零售系統的進銷存屬性
員工發貨/角色權限定義
商品采購與入庫
表結構設計知識點總覽
表結構設計
品類表
參數表
boolean類型在mysql中是tinyint(1)
品牌表
設計首字母是為了前端分類查找
商品分類表(論壇留言表)
分類與品牌關聯中間表
產品表
菱形標記的是創建了索引
一般情況下不會給字符串創建索引
商品表
JSON本質是字符串,不適合作為索引
JSON格式的商品圖片
JSON格式的param參數,(這個參數列表是參數表里面定義的,后台上架商品時要求填寫)
省份表與城市表
零售店/倉庫/商品之間的對應關系
倉庫表/倉庫與商品中間表(庫存表)
零售店表/零售店與商品中間表(庫存表)
如果新零售平台有多個分店,庫存不能放在商品表里
會員等級表
枚舉類型
客戶表
客戶收貨地址表
prime 是否作為默認收貨地址
購物優惠券表/客戶關聯優惠券表
- 優惠券有使用期限,一個訂單只能使用一張券
- 購物券與客戶記錄關聯,一個用戶有可能可以領多張同樣的券
deno 優惠券的金額
condition 超過多少錢才能使用優惠券
max_num 優惠券最大發放數量(默認null時不限數量)
訂單表
code 流水號,里面可以包含日期類型等
type 訂單類型 線下銷售/網絡銷售
shop_id 哪個實體店銷售的
postage 郵費
weight 總重量,計算郵費用
voucher_id 優惠券id
訂單詳情表
一個訂單中,不允許出現兩個同樣的商品SKU
部門表/職位表/員工表
mgr_id 上司id
term_date 離職日期
角色表/用戶表 (能使用管理系統的員工)
快遞表
sku指的是發送了那些商品(因為一個快遞可以發送多個商品)
一個訂單里面商品多,可以拆成多個快遞發送,所以order_id可能一樣,但sku一定不一樣
qa_id 質檢員id
de_id 發貨員id
post_id 快遞單號
price 真實郵費
ecp 快遞公司(采用枚舉)
退貨表
payment 退款價格,有時可能不能按照原價退款
商品評價表
rating 一星到五星
供應商數據表/供應商與商品管理表
type 供貨商類型: 廠家/代理/個人
采購表/入庫表/采購與入庫關聯表
表文件
流水號/訂單號設計
- 訂單號是訂單的唯一編號,經常用來做查詢,設置為主鍵索引
- 流水號是打印在購物單據上的字符串,用於閱讀,不做查詢
28位流水號設計
避免偷換交易中的商品信息
案例: 如"全新進口"等廣告信息,在客戶購買后改成了"國產"
保存商品歷次修改信息
老數據可以定期歸檔
原表主鍵id,在這另起一個字段
訂單詳情表也需要修改添加sku_old_id字段
智能拆分訂單--就近發貨難題
由於是自建倉庫,
如果本地倉庫沒貨/顧客城市沒倉庫,
那就需要從外地倉庫發貨
需要計算哪個倉庫距離客戶距離最短
1.通過高德地圖API獲得客戶地理位置信息
可以使用hutool依賴包里的Http請求,查詢地理坐標
2.利用MySQL計算兩坐標點之間的距離
*111195 將坐標轉換成距離
距離是M
除以1000便是KM
如下是北京跟上海的地理位置距離
查詢出跟收貨坐標點距離最近的倉庫信息
且判斷庫存有貨
select t.id from