1. 程式人生 > >電子商務(電銷)平臺中訂單模塊(Order)數據庫設計明細(轉)

電子商務(電銷)平臺中訂單模塊(Order)數據庫設計明細(轉)

省份 歷史 創建 備註 承擔 是否 sts mis country

以下是自己在電子商務系統設計中的訂單模塊的數據庫設計經驗總結,而今發表出來一起分享,如有不當,歡迎跟帖討論~

訂單表 (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. 不要怕拆分成很多表,讀的時候多張表關聯讀取,會比讀取一張字段非常多的數據量龐大的表效率高很多。

電子商務(電銷)平臺中訂單模塊(Order)數據庫設計明細(轉)