一、背景说明
商品模块中绕不开SKU(Stock Keeping Unit,库存量单位)和SPU(Standard Product Unit,标准化产品单元)。
更通俗的来说,SPU就是淘宝里的通用标题,SKU是通过某些属性确定的某一款商品。例如“AJ1男子运动鞋复古 DD6834”就是SPU,这个SPU下有很多的SKU,包括“橙色 44.5码”,“橙色 45码”,“橙色 46码”,“橙色 47.5码”等。
二、表结构
1 商品信息表(SPU表)
CREATE TABLE `litemall_goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`goods_sn` varchar(63) NOT NULL DEFAULT '' COMMENT '商品编号',
`name` varchar(127) NOT NULL DEFAULT '' COMMENT '商品名称',
`category_id` int(11) DEFAULT '0' COMMENT '商品所属类目ID',
`brand_id` int(11) DEFAULT '0',
`gallery` varchar(1023) DEFAULT NULL COMMENT '商品宣传图片列表,采用JSON数组格式',
`keywords` varchar(255) DEFAULT '' COMMENT '商品关键字,采用逗号间隔',
`brief` varchar(255) DEFAULT '' COMMENT '商品简介',
`is_on_sale` tinyint(1) DEFAULT '1' COMMENT '是否上架',
`sort_order` smallint(4) DEFAULT '100',
`pic_url` varchar(255) DEFAULT NULL COMMENT '商品页面商品图片',
`share_url` varchar(255) DEFAULT NULL COMMENT '商品分享海报',
`is_new` tinyint(1) DEFAULT '0' COMMENT '是否新品首发,如果设置则可以在新品首发页面展示',
`is_hot` tinyint(1) DEFAULT '0' COMMENT '是否人气推荐,如果设置则可以在人气推荐页面展示',
`unit` varchar(31) DEFAULT '’件‘' COMMENT '商品单位,例如件、盒',
`counter_price` decimal(10,2) DEFAULT '0.00' COMMENT '专柜价格',
`retail_price` decimal(10,2) DEFAULT '100000.00' COMMENT '零售价格',
`detail` text COMMENT '商品详细介绍,是富文本格式',
`add_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`),
KEY `goods_sn` (`goods_sn`),
KEY `cat_id` (`category_id`),
KEY `brand_id` (`brand_id`),
KEY `sort_order` (`sort_order`)
) ENGINE=InnoDB AUTO_INCREMENT=1181004 DEFAULT CHARSET=utf8mb4 COMMENT='商品基本信息表';
以下就是商品表存储的内容。
2 商品货品表(SKU)
CREATE TABLE `litemall_goods_product` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`goods_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品表的商品ID',
`specifications` varchar(1023) NOT NULL COMMENT '商品规格值列表,采用JSON数组格式',
`price` decimal(10,2) NOT NULL DEFAULT '0.00' COMMENT '商品货品价格',
`number` int(11) NOT NULL DEFAULT '0' COMMENT '商品货品数量',
`url` varchar(125) DEFAULT NULL COMMENT '商品货品图片',
`add_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`),
KEY `goods_id` (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=251 DEFAULT CHARSET=utf8mb4 COMMENT='商品货品表';
以下就是商品货品表(SKU表)存储信息的详情,goods_id就是商品表中的id。同一个goods_id下可以有很多货品,这些货品在尺寸和颜色上各自不同。
3 商品参数表
CREATE TABLE `litemall_goods_attribute` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`goods_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品表的商品ID',
`attribute` varchar(255) NOT NULL COMMENT '商品参数名称',
`value` varchar(255) NOT NULL COMMENT '商品参数值',
`add_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`),
KEY `goods_id` (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=877 DEFAULT CHARSET=utf8mb4 COMMENT='商品参数表';
下图展示的是商品属性表存储的内容,可以看出针对同一件商品,可以有很多个参数,每个参数有对应的值。
4 商品规格表
商品规格表存储的就是基本属性,例如规格名称可以是颜色,对应的规格值有红黄蓝三种颜色。再例如规格是尺码,对应的规格值是41,42,43,44,45,46。
多说一句,通过不同规格的组合就会产生不同的SKU,例如针对球鞋这个商品有42码+红色。SPU是球鞋,42码红色球鞋就是该SPU下的SKU。
CREATE TABLE `litemall_goods_specification` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`goods_id` int(11) NOT NULL DEFAULT '0' COMMENT '商品表的商品ID',
`specification` varchar(255) NOT NULL DEFAULT '' COMMENT '商品规格名称',
`value` varchar(255) NOT NULL DEFAULT '' COMMENT '商品规格值',
`pic_url` varchar(255) NOT NULL DEFAULT '' COMMENT '商品规格图片',
`add_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`deleted` tinyint(1) DEFAULT '0' COMMENT '逻辑删除',
PRIMARY KEY (`id`),
KEY `goods_id` (`goods_id`)
) ENGINE=InnoDB AUTO_INCREMENT=250 DEFAULT CHARSET=utf8mb4 COMMENT='商品规格表';
下图展示的是商品规格表实际存储的数据,可以看出针对同一个商品,可以有多个规格名称(维度),同一个规格名称(维度)下,又可以有不同的规格值。