樂優商資料庫表關係

  • 2019 年 11 月 3 日
  • 筆記

版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。

本文鏈接:https://blog.csdn.net/weixin_44580977/article/details/102840308

這裡給大家分析一下樂優商城是如何進行商品的表設計以及後端插入的流程 如有錯誤,歡迎指正

1.表的結構

1.tb_spu表是存儲共同屬性的商品集 有外鍵 brand_id ,category_id (3級別)

2.tb_sku表是存儲每個tb_spu表對應商品的幾種不同類型,外鍵是spu_id

3.tb_spec_group表為spu的從表,不同caregory_id有不同的共有屬性,外鍵是category_id

4.tb_spec_params表為tb_spec_group表的從表,通過group_id查找每個主體裡面的屬性,外鍵是group_id

5.tb_spu_detail表為tb_spu表內商品對應公共參數值和一些特殊參數值(手機紅的,白的)

brand和category 就沒必要說了

2.表關係

ps:箭頭請勿理會,本表關係,圍繞spu商品展開,其餘之間關係未標註

3.後端插入商品流程

savegoods 要做的事情

1.插入spu,其內容包括,標題,副標題,三級cid,品牌id,是否上架默認不上架,是否有效,默認有效,添加時間,修改時間

2.插入sup_detail,其內容包括,商品描述(富文本),商品通用規格參數對象,商品特有規格參數集合對象(自定義的顏色記憶體等),包裝清單,售後服務

3.插入sku,具體商品,其內容包括,spu_id,商品標題,商品圖片,售價,特有屬性的值(便於發給前端),自定義規格(顏色,內容)具體的值(這裡對應一個具體的商品),是否有效,添加時間,修改時間

4.插入stock,其內容包括可秒殺庫存,秒殺總數量(前兩個這暫時用不到),sku_id,庫存數量

service 層程式碼      /**       * 新增商品       * @param spuBo       */      @Transactional      public void saveGoods(SpuBo spuBo) {          System.out.println(spuBo);          // 新增spu          // 設置默認欄位          spuBo.setId(null);          spuBo.setSaleable(true);          spuBo.setValid(true);          spuBo.setCreateTime(new Date());          spuBo.setLastUpdateTime(spuBo.getCreateTime());          this.goodsMapper.insertSelective(spuBo);            // 新增spuDetail          SpuDetail spuDetail = spuBo.getSpuDetail();          spuDetail.setSpuId(spuBo.getId());          spuDetailMapper.insertSelective(spuDetail);            saveSkuAndStock(spuBo);      }        /**       * Goods增加  增加sku特有屬性對應的實際商品和庫存       * @param spuBo       */      private void saveSkuAndStock(SpuBo spuBo) {          spuBo.getSkus().forEach(sku -> {              // 新增sku              sku.setSpuId(spuBo.getId());              sku.setCreateTime(new Date());              sku.setLastUpdateTime(sku.getCreateTime());              skuMapper.insertSelective(sku);                // 新增庫存              Stock stock = new Stock();              stock.setSkuId(sku.getId());              stock.setStock(sku.getStock());              stockMapper.insertSelective(stock);              System.out.println("請看下面 sku 和 stock");              System.out.println(sku);              System.out.println(stock);          });      }