電商商品表設計


一、了解下商品中的兩個概念:SPU和SKU

SPU(Standard Product Unit):標准化產品單元。是商品信息聚合的最小單位,是一組可復用、易檢索的標准化信息的集合,該集合描述了一個產品的特性。通俗點講,屬性值、特性相同的商品就可以稱為一個SPU。

SKU=Stock Keeping Unit(庫存量單位)。即庫存進出計量的基本單元,可以是以件,盒,托盤等為單位。

舉個例子:iPhone6是一個SPU,iPhone6 32G 白色是一個SKU,iPhone6 128G 白色是另一個SKU。

 

我們剛才說的 iphone6,書面稱謂叫“SPU” Standard Product Unit (標准化產品單元),它是最接近用戶認知的產品單元,比如用戶說,我想買個 iphone4、iphone6、小米 4,這些都是 SPU,也就是用戶普遍認知范圍內的一種產品。然而在電商系統中只有 SPU 並沒有什么卵用,用戶購買時肯定要確定,需要什么顏色、多少 G 的,支持什么網絡。所以,例如金色 -16G- 移動版 iphone6,就需要一個名稱去規范它,這個名稱叫“SKU” Stock Keeping Unit(庫存單元),換句話理解就是庫存里面存的東西,庫存里存在東西肯定是具體的某種規格的 iphone6。基於這個理解,我們先畫下圖:

 

SPU表有了,這里還是以iPhone6為例,iPhone6有內存16G的,有32G的,有黑色,有白色等信息,這些信息我們稱之為規格,比如內存是一種規格,顏色是一種規格。這些規格放在那里呢,放在SPU表里面自然是不合適的,因為每個SPU的規格都不一樣。因此這里需要一張規格表,用來存放內存,顏色(不是存放32G,黑色,就存放“內存”,“顏色”這個值,表示這個SPU具有內存,顏色規格),然后用一張中間表,把SPU表和規格表關聯起來,如圖:

 

接下來需要解決的是,如何存放“32G”,“黑色”這些值呢?這些時具體規格的值,只需要新建一張規格值表即可。規格表和規格值表是一對多的關系,即一個規格有多個值,內存有32G,64G等。

發現還少了品牌的概念,SPU與品牌的關系是一對一的關系,一個SPU具有一個品牌(iPhone6的品牌是蘋果),這點好理解,因此只要新建一張品牌表,然后SPU表里添加一個品牌id。

 

至此,我們似乎已經可以通過規格搜索出大部分的商品,屏幕尺寸,網絡,機身內存這三項都是規格,品牌我們也知道了。

但是,購物商城中不可能只賣手機,還會賣電腦,衣服等。這里我們衍生出另一個概念:分類。其中手機是一種分類。因此,我們要新建一張分類表,里面存放各種分類名稱,然后在SPU表里面添加一個分類id,如圖:

 

現在,我們已經把SPU相關的表設計好了,現在來設計SKU相關的表。

根據SKU的定義得知,SKU是SPU的一種詳細說明,因此SPU與SKU的關系是一對多的關系,即一個SPU對應多個SKU,首先我們要有一張SKU表:

 

 

 

其中SKU表中有一個spu_id。然后我們來看下SKU需要哪些字段,上面說到了SPU有規格,那SKU就落實到了具體的規格值,即具體的內存,顏色等。規格值表已經有了,因此需要建一張SKU與規格值的關聯表:

 

 

 

大部分的內容我們都有了,但還缺少幾樣東西,如果是C2C的商城,那應該有個店鋪,還有一個增值保障。一個SKU對應一個店鋪,可直接在SKU表里加一個店鋪id,然后有一張獨立的店鋪表。

 

 

至於增值保障,肯定需要一張表來存放增值保障信息,然后它跟SKU的關系是多對多的關系,需要一張中間表來關聯

 

 

至此,商品表的核心內容已經設計得差不多了。

原文鏈接:https://blog.csdn.net/thc1987/article/details/80426063


一張相似的設計圖

 圖片來源:http://www.360doc.com/content/18/0810/15/58569063_777227507.shtml

 

 數據表設計

  1 對於商品模塊,統一使用goods_做前綴。
  2 首先是兩個比較簡單的表:分類表和品牌表
  3 
  4 分類表:
  5 CREATE TABLE `goods_category` (
  6   `id` bigint(20) unsigned NOT NULL auto_increment,
  7   `category_name` varchar(50) NOT NULL COMMENT '分類名稱',
  8   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
  9   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 10   PRIMARY KEY  (`id`)
 11 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='分類表';
 12 
 13 品牌表:
 14 CREATE TABLE `goods_brand` (
 15   `id` bigint(20) unsigned NOT NULL auto_increment,
 16   `brand_name` varchar(50) NOT NULL COMMENT '品牌名稱',
 17   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 18   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 19   PRIMARY KEY  (`id`)
 20 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='品牌表';
 21 
 22 接下來是SPU表:
 23 
 24 CREATE TABLE `goods_spu` (
 25   `id` bigint(20) unsigned NOT NULL auto_increment,
 26   `spu_no` varchar(50) NOT NULL COMMENT '商品編號,唯一',
 27   `goods_name` varchar(50) NOT NULL COMMENT '商品名稱',
 28   `low_price` decimal(9,2) NOT NULL COMMENT '最低售價',
 29   `category_id` bigint(20) NOT NULL COMMENT '分類id',
 30   `brand_id` bigint(20) NOT NULL COMMENT '品牌id',
 31   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 32   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 33   PRIMARY KEY  (`id`),
 34   UNIQUE KEY `uk_spu_no` (`spu_no`)
 35 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='spu表';
 36 
 37 然后是SPU規格相關的表:
 38 規格表:
 39 CREATE TABLE `goods_spec` (
 40   `id` bigint(20) unsigned NOT NULL auto_increment,
 41   `spec_no` varchar(50) NOT NULL COMMENT '規格編號',
 42   `spec_name` varchar(50) NOT NULL COMMENT '規格名稱',
 43   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 44   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 45   PRIMARY KEY  (`id`)
 46 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='規格表';
 47 
 48 規格值表:
 49 CREATE TABLE `goods_spec_value` (
 50   `id` bigint(20) unsigned NOT NULL auto_increment,
 51   `spec_id` bigint(20) NOT NULL COMMENT '規格id',
 52   `spec_value` varchar(50) NOT NULL COMMENT '規格值',
 53   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 54   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 55   PRIMARY KEY  (`id`)
 56 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='規格值表';
 57 
 58 SPU規格表
 59 CREATE TABLE `goods_spu_spec` (
 60   `id` bigint(20) unsigned NOT NULL auto_increment,
 61   `spu_id` bigint(20) NOT NULL COMMENT 'spu_id',
 62   `spec_id` bigint(20) NOT NULL COMMENT 'spec_id',
 63   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 64   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 65   PRIMARY KEY  (`id`)
 66 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='spu規格表';
 67 
 68 接下來是SKU相關的表:
 69 SKU表:
 70 CREATE TABLE `goods_sku` (
 71   `id` bigint(20) unsigned NOT NULL auto_increment,
 72   `sku_no` varchar(50) NOT NULL COMMENT 'sku編號,唯一',
 73   `sku_name` varchar(50) NOT NULL COMMENT 'sku名稱(冗余spu_name)',
 74   `price` decimal(9,2) NOT NULL COMMENT '售價',
 75   `stock` int(11) NOT NULL COMMENT '庫存',
 76   `shop_id` bigint(20) NOT NULL COMMENT '商鋪id,為0表示自營',
 77   `spu_id` bigint(20) NOT NULL COMMENT 'spu_id',
 78   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 79   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 80   PRIMARY KEY  (`id`)
 81 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku表';
 82 
 83 商鋪表:
 84 CREATE TABLE `shop_info` (
 85   `id` bigint(20) unsigned NOT NULL auto_increment,
 86   `shop_name` varchar(50) NOT NULL COMMENT '店鋪名稱',
 87   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 88   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 89   PRIMARY KEY  (`id`)
 90 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='店鋪表';
 91 
 92 增值保障表:
 93 CREATE TABLE `goods_safeguard` (
 94   `id` bigint(20) unsigned NOT NULL auto_increment,
 95   `safeguard_name` varchar(50) NOT NULL COMMENT '保障名稱',
 96   `price` decimal(9,2) NOT NULL COMMENT '保障價格',
 97   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
 98   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
 99   PRIMARY KEY  (`id`)
100 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='增值保障';
101 
102 SKU增值保障
103 CREATE TABLE `goods_sku_safeguard` (
104   `id` bigint(20) unsigned NOT NULL auto_increment,
105   `sku_id` bigint(20) NOT NULL COMMENT 'sku_id',
106   `safeguard_id` bigint(20) NOT NULL COMMENT 'safeguard_id',
107   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
108   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
109   PRIMARY KEY  (`id`)
110 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku增值保障';
111 
112 SKU規格值表
113 CREATE TABLE `goods_sku_spec_value` (
114   `id` bigint(20) unsigned NOT NULL auto_increment,
115   `spu_id` bigint(20) NOT NULL COMMENT 'sku_id',
116   `spec_value_id` bigint(20) NOT NULL COMMENT '規格值id',
117   `gmt_create` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
118   `gmt_update` timestamp NOT NULL default '0000-00-00 00:00:00',
119   PRIMARY KEY  (`id`)
120 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='sku規格值';
View Code

 


免責聲明!

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



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