電子商務(電銷)平臺中訂單模組(Order)資料庫設計明細
轉載: https://www.cnblogs.com/sochishun/p/7040628.html
以下是自己在電子商務系統設計中的訂單模組的資料庫設計經驗總結,而今發表出來一起分享,如有不當,歡迎跟帖討論~
訂單表 (order)
|-- 自動編號(order_id, 自增長主鍵)
|-- 訂單單號(order_no, 唯一值,供客戶查詢)
|-- 商店編號(shop_id, 商店表自動編號)
|-- 訂單狀態 (order_status,未付款,已付款,已發貨,已簽收,退貨申請,退貨中,已退貨,取消交易)
|-- 商品數量 (product_count, 商品專案數量,不是商品)
|-- 商品總價 (product_amount_total)
|-- 訂單金額 (order_amount_total,實際付款金額)
|-- 運費金額 (logistics_fee)
|-- 是否開箱驗貨 (is_unpacking_inspection)
|-- 是否開票(是否開具發票)
|-- 發票編號 (訂單發票表自動編號)
|-- 收貨地址編號 (address_id, 收貨地址表自動編號)
|-- 訂單物流編號 (orderlogistics_id, 訂單物流表自動編號)
|-- 訂單支付渠道 (pay_channel)
|-- 訂單支付單號 (out_trade_no/escrow_trade_no,第三方支付流水號)
|-- 建立時間 (下單時間)
|-- 付款時間
|-- 發貨時間
|-- 客戶編號 (user_id,使用者表自動編號)
|-- 客戶備註
|-- 訂單結算狀態 (order_settlement_status,貨到付款、分期付款會用到)
|-- 訂單結算時間 (order_settlement_time)
訂單發票表 (order_invoice)
|-- 自動編號 (invoice_id)
|-- 訂單編號 (order_id)
|-- 是否增值稅發票 (is_vat, 普通發票,增值發票)
|-- 發票擡頭名稱 (invoice_title)
|-- 發票擡頭內容 (invoice_content)
|-- 發票金額 (invoice_amount)
|-- 發票稅號 (invoice_tax_no)
|-- 開票稅金 (invoice_tax)
|-- 公司名稱[增值稅] (vat_company_name)
|-- 公司地址[增值稅] (vat_company_address)
|-- 聯絡電話[增值稅] (vat_telphone)
|-- 開戶銀行[增值稅] (vat_bank_name)
|-- 銀行帳號[增值稅] (vat_bank_account)
|-- 開票時間 (created_time)
訂單物流表 (order_logistics)
|-- 自動編號 (orderlogistics_id)
|-- 訂單編號 (order_id, 訂單表自動編號)
|-- 物流單號 (express_no, 發貨快遞單號)
|-- 收貨人姓名 (consignee_realname, 收貨地址表可能更新或刪除,因此要在這裡記錄)
|-- 聯絡電話 (consignee_telphone, 收貨地址表可能更新或刪除,因此要在這裡記錄)
|-- 備用聯絡電話 (consignee_telphone2, 收貨地址表可能更新或刪除,因此要在這裡記錄)
|-- 收貨地址 (consignee_address, 收貨地址表可能更新或刪除,因此要在這裡記錄)
|-- 郵政編碼 (consignee_zip, 收貨地址表可能更新或刪除,因此要在這裡記錄)
|-- 物流方式(logistics_type, ems, express)
|-- 物流商家編號 (logistics_id,物流商家表自動編號)
|-- 物流發貨運費 (logistics_fee,顯示給客戶的訂單運費)
|-- 快遞代收貨款費率 (agency_fee, 快遞公司代收貨款費率,如貨值的2%-5%,一般月結)
|-- 物流成本金額 (delivery_amount, 實際支付給物流公司的金額)
|-- 物流狀態 (orderlogistics_status)
|-- 物流結算狀態 (logistics_settlement_status, 未結算,已結算,部分結算)
|-- 物流最後狀態描述 (logistics_result_last)
|-- 物流描述 (logistics_result)
|-- 發貨時間 (logistics_create_time)
|-- 物流更新時間 (logistics_update_time)
|-- 物流結算時間 (logistics_settlement_time)
|-- 物流支付渠道
|-- 物流支付單號
|-- 物流公司已對賬狀態 (reconciliation_status,已對賬,未對賬)
|-- 物流公司對賬日期 (reconciliation_time)
設計說明:收貨地址可能被修改、刪除等,因此這裡要記錄發貨時使用者的收貨地址,這樣就算後來收貨地址被刪除了,使用者在檢視歷史訂單的時候也依然能看到收貨地址的快照資訊。
訂單退貨表 (order_returns)
|-- 自動編號 (order_returns_id)
|-- 退貨編號 (returns_no,供客戶查詢)
|-- 訂單編號 (order_id, 訂單表自動編號)
|-- 物流單號 (express_no, 退貨物流單號)
|-- 收貨人姓名 (consignee_realname)
|-- 聯絡電話 (consignee_telphone)
|-- 備用聯絡電話 (consignee_telphone2)
|-- 收貨地址 (consignee_address)
|-- 郵政編碼 (consignee_zip)
|-- 物流方式(logistics_type, ems, express)
|-- 物流商家編號
|-- 物流發貨運費 (logistics_fee,退貨運費)
|-- 物流狀態 (orderlogistics_status)
|-- 物流最後狀態描述
|-- 物流描述
|-- 物流更新時間
|-- 物流發貨時間
|-- 退貨型別 (returns_type, 全部退單,部分退單)
|-- 退貨處理方式 (handling_way, PUPAWAY:退貨入庫;REDELIVERY:重新發貨;RECLAIM-REDELIVERY:不要求歸還並重新發貨; REFUND:退款; COMPENSATION:不退貨並賠償)
|-- 退款金額 (returns_amount)
|-- 退貨銷售員承擔的費用 (seller_punish_fee)
|-- 退貨申請時間 (return_submit_time)
|-- 退貨處理時間 (handling_time)
|-- 退貨原因
設計說明:退貨可能被修改、刪除等,因此這裡要記錄退貨時商家的退貨地址資訊,
訂單商品詳情表 (order_detail)
|-- 自動編號
|-- 訂單編號
|-- 商品編號
|-- 商品名稱 (product_name, 商品可能刪除,所以這裡要記錄,不能直接讀商品表)
|-- 商品價格 (product_price, 商品可能刪除,所以這裡要記錄)
|-- 商品型號 (product_marque,前臺展示給客戶)
|-- 商品條碼 (product_store_barcode, 商品倉庫條碼)
|-- 商品型號資訊 (product_mode_desc,記錄詳細商品型號,如顏色、規格、包裝等)
|-- 商品型號引數 (product_mode_params, JSON格式,記錄單位編號、顏色編號、規格編號等)
|-- 折扣比例 (discount_rate 打幾折)
|-- 折扣金額 (discount_amount)
|-- 購買數量 (number)
|-- 小計金額 (subtotal)
|-- 商品是否有效 (is_product_exists)
|-- 客戶商品備註 (remark)
設計說明:商品可能被修改、刪除等,因此這裡要記錄下單時使用者關注的商品交易摘要資訊,如價格、數量、型號、型號引數等。這樣就算後來商品被刪除了,使用者在檢視歷史訂單的時候也依然能看到商品的快照資訊。
收貨地址表 (delivery_address)
|-- 自動編號 (address_id)
|-- 使用者編號 (user_id, 使用者表自動編號)
|-- 收件人姓名 (realname)
|-- 聯絡電話 (telphone)
|-- 備用聯絡電話 (telphone2)
|-- 國家 (country)
|-- 省份 (province)
|-- 城市 (city)
|-- 地區 (area)
|-- 街道/詳細收貨地址 (street)
|-- 郵政編碼 (zip)
|-- 是否預設收貨地址 (is_default_address)
|-- 建立時間 (created_time)
購物車表 (shoppingcart)
|-- 自動編號 (id)
|-- 使用者編號 (user_id)
|-- 商店編號 (shop_id)
|-- 商品編號 (product_id)
|-- 是否有效 (is_product_exists)
|-- 購買數量 (number)
|-- 建立時間 (created_time)
設計說明:商品價格和小計金額是要通過實時關聯商品表來讀取和計算,因為商戶可能會更改商品價格,或者商品已售罄,或者商品已下架等,因此這裡只需要記錄商品id就可以,商品價格等要實時從商品表讀取。
===============================用於電話營銷的訂單模組的擴充套件設計======================================
訂單業務稽核流程表 (order_auditbiz)
|-- 自動編號 (order_auditbiz_id)
|-- 訂單編號 (order_id)
|-- 訂單狀態 (0:未稽核或發起交易;1:交易完成;20:核單通過;24:核單失敗;30:已發貨;未簽收;34:倉庫退回;40:座席取消;41:買家取消;42:逾期取消;43:訂單無效取消;50:客戶簽收;54:客戶拒籤;55:客戶退貨)
|-- 銷售員直接確認訂單(不需要訂單稽核員確認,直接強制稽核通過,如客戶退貨則銷售員必須承擔退貨運費) (is_seller_risk_confirm)
|-- 訂單退貨,銷售員是否承擔運費 (is_seller_punish
_logistics_fee)
|-- 銷售員是否提成 (is_seller_commission)
|-- 銷售員提成比例 (seller_commission_rate, 無提成則填0)
|-- 銷售員提成金額 (seller_commission_amount)
|-- 銷售員訂單備註(seller_remark,給訂單稽核員看的備註)
|-- 訂單稽核員訂單備註 (confirmer_remark,給倉管看的備註)
|-- 倉管備註(storekeeper_returnback_remark,倉管退給訂單稽核員看的備註)
|-- 財務備註 (cashier_remark, 財務給銷售員看的備註)
|-- 銷售員使用者編號 (seller_uid)
|-- 訂單稽核員使用者編號 (auditor_uid)
|-- 收款人使用者編號 (cashier_uid,收款人不一定是財務)
|-- 財務使用者編號 (accountant_uid, 財務人員使用者編號)
|-- 訂單來源 (order_source, 銷售下單,內部購買)
|-- 訂單稽核員稽核時間 (auditor_audited_time)
|-- 倉管員稽核時間 (storekeeper_audited_time)
|-- 財務稽核時間 (accountant_audited_time)
訂單提成表 (order_commission)
|-- 自動編號 (order_commission_id)
|-- 訂單編號 (order_id)
|-- 銷售員使用者編號 (seller_uid)
|-- 提成金額 (commission_amount)
|-- 結算狀態 (settlement_status)
|-- 結算時間 (settlement_time)
|-- 財務人員使用者編號 (cashier_uid)
訂單排程表 (order_dispatch)
|-- 自動編號
|-- 訂單編號
|-- 被排程的營銷人員使用者編號 (from_seller_uid)
|-- 營銷人員使用者編號 (to_seller_uid)
|-- 排程原因 (dispatch_reason)
|-- 排程管理員 (diapatch_admin_uid)
|-- 排程日期 (created_time)
資料庫設計原則是:
1. 為提高讀的效能,儘可能把寫的操作拆分到另一張表,因為對錶的更新操作會導致鎖表,會降低資料表的讀取的效能。
2. 交易時一些關聯資訊可能在後來會被修改或刪除,如商品、收貨地址等,因此要在訂單中記錄交易時的商品資訊和收貨地址,一邊後來商品或收貨地址被刪除的時候,依然能在歷史訂單中看到快照資訊。
3. 不要怕拆分成很多表,讀的時候多張表關聯讀取,會比讀取一張欄位非常多的資料量龐大的表效率高很多。