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

猜你喜欢

转载自blog.csdn.net/weixin_41491254/article/details/81286588