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