電商專案(一)———Sku和Spu以及電商專案商品的設計思路

電商專案(一)———Sku和Spu以及電商專案商品的設計思路

一,在電商專案裡面為了準確的描述商品的區別,我們抽象出來兩個概念,Spu和Sku這兩個概念。

Spu(標準產品單位 ):一組具有共同屬性的商品集

Sku(庫存量單位):SPU商品集因具體特性不同而細分的每個商品

 

Spu 需要包括:id:主鍵                                                              Sku需要包括:id:主鍵
                           title:標題                                                                                spu_id:關聯的spu
                           description:描述                                                                    price:價格
                           specification:規格                                                                  images:圖片
                           packaging_list:包裝                                                               stock:庫存
                           after_service:售後服務                                                           顏色?
                           comment:評價                                                                        記憶體?
                           category_id:商品分類                                                             硬碟?
                           brand_id:品牌   

 

商品設計裡面Spu最難得地方在於每種產品規格引數不同導致設計難度增大,截圖說明商品不一樣導致規格引數不一樣。

以上截圖從京東商城截圖所得,不同產品之間的規格引數差異還是蠻大的。

Sku的設計難點在於它的規格是引數根據的使用者的選擇在變化,但是細心地話,可以發現我們在京東淘寶上面更改引數的時候,規格引數跟著變化,所以我們把問題拋給規格引數解決就好了。

 

二,資料庫中商品的規格引數的設計

    我們的規格參數列應該和什麼相對應,通過仔細觀察分析可知,我們的同一個商品分類裡面所有的商品所對應的規格引數是一樣的。同時我們還應該知道,規格引數的顯示是有講究的,這裡我們可以通過把某一類引數看成組,並且設計相應的資料庫表與之對應,如上圖所顯示的主體和基本資訊分別是兩張不同的資料庫表,那麼我們的商品分類表和引數規格分組表是一對多關係。我們每一組裡面的包括很多組屬性資訊,所有我們還需要單獨設計一張資料庫引數資訊表,也是一對多的關係

1,tb_spec_group:引數規格分組表

資料庫表中包括的欄位:

  • id:主鍵

  • cid:商品分類id,一個分類下有多個模板,指定該組在哪個分類下

  • name:該規格組的名稱。

CREATE TABLE `tb_spec_group` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
  `cid` bigint(20) NOT NULL COMMENT ‘商品分類id,一個分類下有多個規格組’,
  `name` varchar(50) NOT NULL COMMENT ‘規格組的名稱’,
  PRIMARY KEY (`id`),
  KEY `key_category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT=’規格引數的分組表,每個商品分類下有多個規格引數組’;

 

圖上就是紅框內就是不同的引數規格分組表。

 

2,tb_spec_param :引數規格引數資訊表

這裡設計相對於引數規格分組表較為複雜一些,規格引數中有一部分是 SKU的通用屬性,一部分是SKU的特有屬性,而且其中會有一些將來用作搜尋過濾,這些資訊都需要標記出來。

通用屬性

用一個布林型別欄位來標記是否為通用:

  • generic來標記是否為通用屬性:

    • true:代表通用屬性

    • false:代表sku特有屬性

搜尋過濾

與搜尋相關的有兩個欄位:

  • searching:標記是否用作過濾

    • true:用於過濾搜尋

    • false:不用於過濾

  • segments:某些數值型別的引數,在搜尋時需要按區間劃分,這裡提前確定好劃分割槽間

    • 比如電池容量,0~2000mAh,2000mAh~3000mAh,3000mAh~4000mAh

數值型別

某些規格引數可能為數值型別,這樣的資料才需要劃分割槽間,我們有兩個欄位來描述:

  • numberic:是否為數值型別

    • true:數值型別

    • false:不是數值型別

  • unit:引數的單位

CREATE TABLE `tb_spec_param` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主鍵’,
  `cid` bigint(20) NOT NULL COMMENT ‘商品分類id’,
  `group_id` bigint(20) NOT NULL COMMENT ‘商品分類id’,
  `name` varchar(255) NOT NULL COMMENT ‘引數名’,
  `numeric` tinyint(1) NOT NULL COMMENT ‘是否是數字型別引數,true或false’,
  `unit` varchar(16) DEFAULT ” COMMENT ‘數字型別引數的單位,非數字型別可以為空’,
  `generic` tinyint(1) NOT NULL COMMENT ‘是否是sku通用屬性,true或false’,
  `searching` tinyint(1) NOT NULL COMMENT ‘是否用於搜尋過濾,true或false’,
  `segments` varchar(1000) DEFAULT ” COMMENT ‘數值型別引數,如果需要搜尋,則新增分段間隔值,如CPU頻率間隔:0.5-1.0’,
  PRIMARY KEY (`id`),
  KEY `key_group` (`group_id`),
  KEY `key_category` (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COMMENT=’規格引數組下的引數名’;