用簡單的 Schema,處理系統中複雜且持續擴充的行銷模組。
公司可能有折扣碼、滿額折抵、檔期活動等,各自都會影響訂單金額。這時不要把訂單欄位設計得太複雜,可以建立一張 order_discounts 表,欄位包含:
id、order_id、label、amount、created_at
其中 amount 使用整數即可,不需要負數。就像訂單中的 items_subtotal、discount_total、shipping_fee、total,全部都使用正整數表示金額。
訂單總金額公式如下:
total = items_subtotal - discount_total + shipping_fee
而 discount_total 就是該訂單所有 order_discounts 資料列的 amount 加總。只要找出同一張訂單的所有折扣,將金額相加,就能得到 orders 中的 discount_total,邏輯簡單,也容易維護。
在訂單金額明細中,先顯示商品小計,再把每筆折扣逐一列出,例如折扣碼、滿額優惠或檔期活動,讓使用者清楚看到每一筆扣款。
要注意的是,免運不應放在 order_discounts 裡。免運只要將 shipping_fee 設為 0 即可;有值代表收運費,0 就代表免運。
每筆行銷或折扣原因,例如「Welcome 折扣碼」、「滿 5000 折 10%」,都寫在 label 欄位。這樣既清楚又容易擴充,不會因為未來增加新的行銷模組而卡住。