本章獨(dú)立商城網(wǎng)站的建設(shè)適合初級工程師及中級工程師細(xì)看,大佬請隨意。
前言
問 [不存價(jià)格字段不行嗎?直接查詢商品表獲取價(jià)格]?
答 [如果價(jià)格更新,應(yīng)提示用戶,商品的浮動信息。可以選擇直接更新購物車,或者單獨(dú)建立一個表,來記錄更新的價(jià)格和信息,類似京東]。
問 [聯(lián)表查詢可以從商品表中知道商品是否上架]?
答 [商品不存在了如何聯(lián),只會將邏輯整復(fù)雜,未來包括降價(jià)提醒,無貨提醒,下架提醒,購物車該如何查詢就成了一個問題]。
上一篇文章在對于購物車業(yè)務(wù)及數(shù)據(jù)表設(shè)計(jì)中,有位童鞋在評論區(qū)與我討論許久,特此獨(dú)立一篇文章來詳解下我的想法及我為什么這么做,以下為在業(yè)務(wù)層面、邏輯層面、未來功能的可擴(kuò)展性、編碼的復(fù)雜度、數(shù)據(jù)統(tǒng)計(jì)層面來解釋下我的設(shè)計(jì)。
業(yè)務(wù)
業(yè)務(wù)上來看,無論是多表查還是單表存都是合理的,列出以下在網(wǎng)上電子商城系統(tǒng)購物車上的相關(guān)部分業(yè)務(wù)。
1、庫存不足提醒 (提高付款概率);
2、降價(jià)提醒 (提高付款概率);
3、商品下架提醒;
4、有關(guān)商品的商品優(yōu)惠券或其他活動 (提高付款概率);
以技術(shù)角度說明。
降價(jià)提醒
多表的降價(jià)提醒需要第三張表支撐 <商品修改記錄表>。
多表
這時購物車內(nèi)的商品與商品表存在關(guān)聯(lián),檢測降價(jià)的系統(tǒng)就需要在商家修改價(jià)格時將檢測結(jié)果后查詢加入本商品的購物車,順便去查詢商家修改前價(jià)格,算出差價(jià),發(fā)送到隊(duì)列或者其他的手段,用戶接收到降價(jià)通知,刺激消費(fèi)。這時你發(fā)現(xiàn),這貌似沒有什么地方有問題,如果這時候需要增加一個業(yè)務(wù),按照用戶加入購物車的時間,提示他在加入購物車后這段時間降價(jià)多少?這時是否需要在來個加入購物車的記錄表,這樣不斷的多級關(guān)聯(lián),看似沒有問題,實(shí)際將業(yè)務(wù)耦合,一次sql要關(guān)聯(lián)N個表,如果這時增加sku和spu那就更不用說了。在未來量級上升后是支撐不住的,并且也不方便擴(kuò)展。
單表
[我的設(shè)計(jì)并不是最好的,僅此參考] , 在考慮到未來業(yè)務(wù)不斷增加的問題,我是將價(jià)格與標(biāo)題和商品的SKU加入到購物車表內(nèi),在商戶修改時無需關(guān)心其他表,直接檢索與修改商品相關(guān)的購物車,拿出價(jià)格,計(jì)算差價(jià),提示用戶。如果計(jì)算加入購物車這段實(shí)際降價(jià)多少,這其實(shí)與上述操作一樣,對于單表的設(shè)計(jì)上,這2種需求實(shí)為一種解決方案。在查詢上也是一條sql語句的實(shí)現(xiàn)。
當(dāng)然,我們還是需要關(guān)聯(lián)上,不知道未來的某一天就用的上了呢?
有很多場景,都要將標(biāo)題呀,內(nèi)容呀直接存儲,類似與收藏的店鋪和商品,無論賣家怎么做,用戶購物車,訂單不能動,這是基準(zhǔn)。
商品下架
商品下架,用戶的購物車實(shí)際是不能動的,某貓的做法是使其變灰,讓用戶自行刪除。
商家分很多種,商品的標(biāo)題,圖片或者分類修改了,都屬于下架,這時的多表關(guān)聯(lián)查詢就徹徹底底的失效了。
其實(shí)商品的下架應(yīng)該直接通知購物車下架 (變灰),并非關(guān)聯(lián)查詢是否下架。如果你非要這樣做,那你依舊需要做一些表去記錄。
我并不是說不需要做記錄。而是記錄的表實(shí)際是不參與業(yè)務(wù)查詢的。
邏輯
邏輯這里特指代碼的架構(gòu)編寫。以php為例,可以參考我之前的文章 https://segmentfault.com/a/11...
在邏輯方面,要考慮方面比較多,類似sql的性能,代碼的性能,服務(wù)器的性能等。盡量避免多表查詢吧。
可復(fù)用性
百度百科的定義是
可復(fù)用性(Reuseability)復(fù)用又叫重用,是重復(fù)使用的意思。目前,一般軟件的復(fù)用率并不高,尤其在國內(nèi)。復(fù)用的好處可以得到 較高的生產(chǎn)效率以及隨之而來的成本降低、較高的軟件質(zhì)量(錯誤可以更快的被糾正)以及 恰當(dāng)?shù)氖褂脧?fù)用可以改善系統(tǒng)的可維護(hù)性。
在購物車的設(shè)計(jì)上,重用主要提現(xiàn)在商品信息的存儲方式上,避免多次去聯(lián)表查詢,在業(yè)務(wù)量大后的份表分庫提現(xiàn)會更明顯。
可擴(kuò)展性
百度百科的定義是:
設(shè)計(jì)良好的代碼允許更多的功能在必要時可以被插入到適當(dāng)?shù)奈恢弥?。這樣做的目的的是為了應(yīng)對未來可能需要進(jìn)行的修改,而造成代碼被過度工程化地開發(fā)。
正常購物車、商品、優(yōu)惠券都是獨(dú)立的系統(tǒng)及功能,不要看做商品在購物車內(nèi)。現(xiàn)實(shí)和邏輯并非是一脈相承的。就假設(shè)在實(shí)際生活中,物品僅僅是放在購物車中,如果不結(jié)賬,依舊不屬于自己。為了方便擴(kuò)展更多業(yè)務(wù),盡量在設(shè)計(jì)之初,功能與功能之間不要“粘”在一起。
可維護(hù)性
百度百科的定義是:
系統(tǒng)的可維護(hù)性是衡量一個系統(tǒng)的可修復(fù)(恢復(fù))性和可改進(jìn)性的難易程度。所謂可修復(fù)性是指在系統(tǒng)發(fā)生故障后能夠排除(或抑制)故障予以修復(fù),并返回到原來正常運(yùn)行狀態(tài)的可能性。而可改進(jìn)性則是系統(tǒng)具有接受對現(xiàn)有功能的改進(jìn),增加新功能的可能性。
購物車的設(shè)計(jì)之初也是考慮未來商品的業(yè)務(wù)功能各種變更。不如簡單點(diǎn),直接將其屬性存到購物車。
復(fù)雜度
初期的設(shè)計(jì),決定未來開發(fā)及重構(gòu)的復(fù)雜度。功能與功能,系統(tǒng)與系統(tǒng)之間盡量避免直接關(guān)聯(lián)。
統(tǒng)計(jì)
后期的數(shù)據(jù)統(tǒng)計(jì)、計(jì)算也會受到前期設(shè)計(jì)的影響。
文章來源:博客園
<數(shù)商云(www.zhimaihui.cn)是國內(nèi)知名企業(yè)級電商平臺提供商,為企業(yè)級商家提供最佳的系統(tǒng)開發(fā)(多種模式電商平臺搭建:B2B/B2B2C/B2C/O2O/新零售等)、供應(yīng)商系統(tǒng)搭建及電商解決方案服務(wù)>
評論