2-2 SPU和SKU详解
??商城系统中的商品信息肯定避免不了SPU和SKU这两个概念,本节就给大家详细介绍下这块的内容
1、掌握SKU和SPU关系
SPU = Standard Product Unit (标准化产品单元)
SPU是商品信息聚合的最小单位,是一组可复用、易检索的标准化信息的集合,该集合描述了一个产品的特性。通俗点讲,属性值、特性相同的商品就可以称为一个SPU。
SKU=stock keeping unit(库存量单位)
SKU即库存进出计量的单位, 可以是以件、盒、托盘等为单位。
SKU是物理上不可分割的最小存货单元。在使用时要根据不同业态,不同管理模式来处理。在服装、鞋类商品中使用最多最普遍。
举个例子:
购买手机的时候,你可以选择华为Mate40系列手机,Mate40系列手机的生产制造商是华为,品牌是华为,手机分类也是华为,不过Mate40系列手机有多款,比如 Mate40 、Mate40 Pro 、 Mate40 Pro +,每款手机的架构也不一样,颜色也不一定一样,那么这个例子中哪些是Spu哪些是Sku呢?
Spu:
手机系列:Mate40系列厂家:华为品牌:华为分类:手机
Sku:
价格颜色 络格式
2、表结构设计
2.1 Spu和Sku
spu:
sku:
CREATE TABLE `sku` ( `id` varchar(60) NOT NULL COMMENT '商品id', `name` varchar(200) NOT NULL COMMENT 'SKU名称', `price` int(20) NOT NULL DEFAULT '1' COMMENT '价格(分)', `num` int(10) DEFAULT '100' COMMENT '库存数量', `image` varchar(200) DEFAULT NULL COMMENT '商品图片', `images` varchar(2000) DEFAULT NULL COMMENT '商品图片列表', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `spu_id` varchar(60) DEFAULT NULL COMMENT 'SPUID', `category_id` int(10) DEFAULT NULL COMMENT '类目ID', `category_name` varchar(200) DEFAULT NULL COMMENT '类目名称', `brand_id` int(11) DEFAULT NULL COMMENT '品牌id', `brand_name` varchar(100) DEFAULT NULL COMMENT '品牌名称', `sku_attribute` varchar(200) DEFAULT NULL COMMENT '规格', `status` int(1) DEFAULT '1' COMMENT '商品状态 1-正常,2-下架,3-删除', PRIMARY KEY (`id`), KEY `cid` (`category_id`), KEY `status` (`status`), KEY `updated` (`update_time`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='商品表';
2.2 商品发布流程分析
商品发布流程如下:
1)分类选择
发布商品前,需要先选择发布商品所属分类,分类严格定义为3级分类。
分类表:
CREATE TABLE `category` ( `id` int(20) NOT NULL AUTO_INCREMENT COMMENT '分类ID', `name` varchar(50) DEFAULT NULL COMMENT '分类名称', `sort` int(11) DEFAULT NULL COMMENT '排序', `parent_id` int(20) DEFAULT NULL COMMENT '上级ID', PRIMARY KEY (`id`), KEY `parent_id` (`parent_id`)) ENGINE=InnoDB AUTO_INCREMENT=11182 DEFAULT CHARSET=utf8 COMMENT='商品类目';
2)选择品牌
分类选择完成后,需要加载品牌,品牌加载并非一次性加载完成,而是根据选择的分类进行加载。
分类品牌关系表:
CREATE TABLE `category_brand` ( `category_id` int(11) NOT NULL COMMENT '分类ID', `brand_id` int(11) NOT NULL COMMENT '品牌ID', PRIMARY KEY (`brand_id`,`category_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
品牌表:
CREATE TABLE `brand` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '品牌id', `name` varchar(100) NOT NULL COMMENT '品牌名称', `image` varchar(1000) DEFAULT '' COMMENT '品牌图片地址', `initial` varchar(1) DEFAULT '' COMMENT '品牌的首字母', `sort` int(11) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8 COMMENT='品牌表';
3)属性加载
当选择分类后,加载分类对应的属性。
分类属性表:
CREATE TABLE `category_attr` ( `category_id` int(11) NOT NULL, `attr_id` int(11) NOT NULL COMMENT '属性分类表', PRIMARY KEY (`category_id`,`attr_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
属性表:
CREATE TABLE `sku_attribute` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) DEFAULT NULL COMMENT '属性名称', `options` varchar(2000) DEFAULT NULL COMMENT '属性选项', `sort` int(11) DEFAULT NULL COMMENT '排序', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
3、 商品发布加载功能
对应的Bean我们已经提前写好,如下
package com.bobo.vip.mall.goods.model;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.io.Serializable;/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category")public class Category implements Serializable { @TableId(type = IdType.AUTO) private Integer id; private String name; private Integer sort; private Integer parentId;}
package com.bobo.vip.mall.goods.model;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableName;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category_attr")public class CategoryAttr { @TableField private Integer categoryId; @TableField private Integer attrId;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "category_brand")public class CategoryBrand { @TableField private Integer categoryId; @TableField private Integer brandId;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@NoArgsConstructor@AllArgsConstructorpublic class Product { // Spu private Spu spu; // Sku private List<Sku> skus;}1234567891011121314
@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "sku")public class Sku { @TableId(type = IdType.ASSIGN_ID) private String id; private String name; private Integer price; private Integer num; private String image; private String images; private Date createTime; private Date updateTime; private String spuId; private Integer categoryId; private String categoryName; private Integer brandId; private String brandName; private String skuAttribute; private Integer status;}
/***** * @Author: 波波 * @Description: 云商城 ****/@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "sku_attribute")public class SkuAttribute implements Serializable { @TableId(type = IdType.AUTO) private Integer id; private String name; private String options; private Integer sort; //对应分类 @TableField(exist = false) private List<Category> categories;}12345678910111213141516171819202122
@Data@AllArgsConstructor@NoArgsConstructor//MyBatisPlus表映射注解@TableName(value = "spu")public class Spu { @TableId(type = IdType.ASSIGN_ID) private Stri
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!