[電商]我的商品規格設計思路


這部分的設計必然少不了會有商品、貨品、規格、規格值表。

先說下我對四個表之間關系設計:

  商品與貨品是一對多的關系。

  規格與規格值是一對多的關系。

就這兩種關系,關系很清晰,其實我剛開始的設計是這樣的:

  商品與貨品是一對多的關系。

  規格與規格值是一對多的關系。

  商品與規格是多對多的關系。

  商品與規格之間的中間表與規格值是多對多的關系。

  貨品與規格值是多對多的關系。

五種關系,看着都讓人頭疼,而這還是簡單的情況下,比如客戶要求商品發布時規格值名字是可手動修改的,那這時我們的"商品與規格之間的中間表與規格值是多對多的關系"就要修改它們的中間表了(中間表新增名稱字段)。

真是剪不斷,理不亂,我想了想於是決定使用字符串來保持它們之間的關系("保持它們之間的關系"可能說成"保存我方需要的對方的數據"更合理)。

讓原本的規格與規格值表與商品表不直接關聯(想象下規格就是規格,只是供商品發布時做為選項而存在的,而商品只是需要規格來完善自己,商品完善后規格的生和滅(從數據庫中刪除)與我無關了,這感覺很合理很正常),而是使用json字符串保存用戶所想要的規格數據,貨品表也一樣,不再與規格值關聯,而是選擇使用json字符串。

這么一來就得到剛開始說的那種只有兩種關系了,下面說下商品與貨品:

  假設我們的商品規格是這樣一個字段為productSpecs的json:[{id:0,name:顏色,solr:0,specValues:[{id:0,name:藍色,pic:blue.jpg},{id:1,name:紅色,pic:red.jpg}]},{id:1,name:尺碼,solr:1,specValues:[{id:2,name:10},{id:3,name:20}]}]

  假設我們的貨品1規格值是這樣一個goodsKeys的json:[{id:0},{id:2}],貨品2規格值是這樣一個json:[{id:0},{id:3}]

  當用戶瀏覽商城主頁點擊一個商品查看商品詳情時,后台會查詢對應的商品數據展示到詳情頁,別的數據就不說了,就說規格選項那塊,比如選項如下表:

顏色    
   藍色  紅色
尺碼    
  10 20

  說下面之前,我們可以先想象一下每一個貨品都有一把鎖(goodsKeys),等待着用戶去解鎖,而解鎖的鑰匙都在商品那里(productSpecs)。

  關於上面那個表是如何出現的呢?假設我用JavaScript代碼寫個案例給你們看下:

//var productSpecs= [{id:0,name:顏色,solr:0,specValues:[{id:0,name:藍色,pic:blue.jpg},{id:1,name:紅色,pic:red.jpg}]},{id:1,name:尺碼,solr:1,specValues:[{id:2,name:10},{id:3,name:20}]}]
/*for(var i=0;i<productSpecs.length;i++){
     productSpecs[i].id;
     productSpecs[i].name;
     for(var j=0;j<productSpecs[i].specValues.length;j++){
            productSpecs[i].specValues[j].id;
            productSpecs[i].specValues[j].name;
            productSpecs[i].specValues[j].pic;
     }          
}*/

上面的代碼我只寫了取數據的部分,是因為這個編輯器不方便編碼,其實只要取到了 數據,生成表格就很簡單了,實際開發中這塊應該是在動態頁面中處理完成的,動態頁面一般都有遍歷列表的方式,比如jsp中的jstl等。

表格選項生成了,也梳理通了邏輯,那么剩下的其實很簡單了,比如用戶選擇顏色:藍色,尺碼:10的一個貨品,顏色藍色id是0,尺碼10id是2,那么我們后台就去貨品表里查找goodsKeys相匹配的貨品,通過比較我們發現貨品1是匹配的,因為它的goodsKeys是[{id:0},{id:2}],那么我們把貨品1的數據展示到頁面即可。

怎么樣,思路是不是清晰了,也許我的思路是錯的,但是功能能夠實現是最重要的。

如果你有更好的方式,請推薦給我,謝謝。

商品發布規格組合算法部分可參考這個:商品發布規格組合算法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM