1.商品规格数据结构
乐优商城是一个全品类的电商网站,因此商品的种类繁多,每一件商品,其属性又有差别。为了更准确描述商品及细分差别,抽象出两个概念:SPU和SKU,了解一下:
(1)SPU和SKU
SKU:Stock Keeping Unit(库存量单位),SPU商品集因具体特性不同而细分的每个商品
-
-
因为颜色、内存等不同,而细分出不同的Mate10,如亮黑色128G版。(SKU)
可以看出:
-
SPU是一个抽象的商品集概念,为了方便后台的管理。
-
SKU才是具体要销售的商品,每一个SKU的价格、库存可能会不一样,用户购买的是SKU而不是SPU
(2)规格参数表
<1>表结构
我们看下规格参数的格式:
因此我们设计了两张表:
-
tb_spec_group:组,与商品分类关联
-
<2>规格组
规格参数分组表:tb_spec_group
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='规格参数的分组表,每个商品分类下有多个规格参数组';
-
-
cid:商品分类id,一个分类下有多个模板
-
<3>规格参数
规格参数表:tb_spec_param
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, `name` varchar(255) NOT NULL COMMENT '参数名', `numeric` tinyint(1) NOT NULL COMMENT '是否是数字类型参数,true或false', `unit` varchar(255) 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='规格参数组下的参数名';
通用属性:
用一个布尔类型字段来标记是否为通用:
-
generic来标记是否为通用属性:
-
true:代表通用属性
-
false:代表sku特有属性
-
搜索过滤:
与搜索相关的有两个字段:
-
searching:标记是否用作过滤
-
true:用于过滤搜索
-
false:不用于过滤
-
-
segments:某些数值类型的参数,在搜索时需要按区间划分,这里提前确定好划分区间
-
比如电池容量,0~2000mAh,2000mAh~3000mAh,3000mAh~4000mAh
-
数据类型:
某些规格参数可能为数值类型,这样的数据才需要划分区间,我们有两个字段来描述:
-
numberic:是否为数值类型
-
true:数值类型
-
false:不是数值类型
-
-