电商项目(一)---------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='规格参数组下的参数名';