正所謂沒有實(shí)踐就無法累計(jì)經(jīng)驗(yàn),我們曾經(jīng)也維護(hù)過客戶的簡易版商城網(wǎng)站,發(fā)現(xiàn)有一些不足的地方,例如商城網(wǎng)站開發(fā)者為了省事,訂單信息中不保存價格信息。當(dāng)然,這有可能是受限于開發(fā)成本的限制。不過我們并不十分建議這樣操作,可能一些真的非常簡單的購物網(wǎng)站可以這樣做,但凡是有點(diǎn)規(guī)模的網(wǎng)站,這樣設(shè)計(jì)訂單表結(jié)構(gòu)就很容易出問題,例如:用戶的歷史訂單價格隨時都有可能變化。
我們建議將訂單和產(chǎn)品信息完全分開,而且,訂單表其實(shí)應(yīng)該分成多個表,最基本的應(yīng)該有兩個:訂單表和訂單商品表。其中,訂單表用來保存訂單號、總金額、商品數(shù)量、下單時間、訂單狀態(tài)和購買者等關(guān)鍵信息。而訂單中所包含的詳細(xì)商品信息則保存在訂單商品表中,例如:商品的SKU編號、商品名稱、規(guī)格信息、單價、購買數(shù)量等詳細(xì)信息。這個時候有人會問了,這里為什么要保存單價呢?商品表中不是已經(jīng)有了嗎?是的,商品表中的價格確實(shí)有,但是商品表中的價格隨時有可能會變動,而訂單商品表中的價格需要記錄下來,就只是代表了用戶下單購買時候的歷史價格而已。如果去調(diào)用商品表中的單價,那么就會出現(xiàn)文章開頭的問題了,這是不因該出現(xiàn)的情況。
另外我們再聊一下購物車中數(shù)據(jù)提交時的驗(yàn)證思路,我們在學(xué)習(xí)編程的時候,老師應(yīng)該不止一次的強(qiáng)調(diào),不可以相信用戶提交的數(shù)據(jù)。我們在處理購物車數(shù)據(jù)的時候,應(yīng)該只獲取用戶提交的商品ID和購買數(shù)量,而商品的價格和訂單總金額,則應(yīng)該通過校驗(yàn)后的商品ID和購買數(shù)量去數(shù)據(jù)庫中實(shí)時讀取數(shù)據(jù)和計(jì)算出來的。