作者:京东物流 顶峰

1 需求

构建一个电商通用型产品中心,可支撑产品的种类和特点繁多,能够售卖什物、虚拟、会员、服务类产品。每一种产品具有不同的标准,不同的标准的产品有多种价格,产品可支撑多种货币的付出。

1)意图是什么?

带我们一同完成一个通用型产品中心,从中学到一些扩展性规划思维。

2)你能学到什么?

  • 理解职业术语和概念
  • 动态sku表单规划
  • 特点和sku扩展性规划
  • 价格扩展性规划
  • 产品标准规划

3)不能学到什么?

  • 产品图片存储规划
  • 产品上下架规划
  • 产品标签规划
  • 库存规划
  • 查找挑选规划

2 产品的基本概念

产品中心是电商各个体系的最根底单元,为商城、订单,优惠促销、库存、仓储物流等体系供给根底数据。

电商的基本术语。

  1. SKU:(Stock Keeping Uint,即库存量单位),库存操控的最小可用单位。例如“iPhone 7 Plus 128G银色”便是一个SKU,库房办理、收购进货、库存办理都是以SKU为记录单元。
  2. SPU:(Standard Product Unit,即标准化产品单元),是一组标准化信息的集合,例如“iPhone 7 Plus”便是一个SPU。
  3. 类目:即分类树。电商常用的有两层类目:前台展现类目和后端产品类目。
    前台类目指的是展现给顾客看的类目,会依据季节、出售策略、活动进行变化;
    后台类目归于根底数据,不行随意变化,增加SKU时都需求挑选后台类目,进行绑定。
  4. 特点:分为要害特点、出售特点、非要害特点、特别特点。
  • 要害特点 是指能够唯一确认产品的特点,是必填项,例如手机的屏幕尺寸、类型归于要害特点。
  • 出售特点 是组成SKU的特别特点,或称为“标准特点”,例如手机的“色彩”、“内存”。
  • 非要害特点 指的是除要害特点、出售特点外的其他特点,如前置摄象头像素、后置摄像头像素、产地、分辨率。
  • 特别特点 指需求经过调用其他服务才能获取到的特点。

3 产品架构图

参阅下面的产品组成模块图,产品模块的组成较为复杂,在界说SKU与SPU时,涉及类目、特点、品牌、出产信息等数据的组合,在界说出SKU后再创立SPU,在SPU上增加产品描述和标准最后就成了产品。依据产品又衍生出了价格办理、谈论办理、查找挑选等模块。

3.1 产品组成模块图

电商通用型商品中心设计

3.2 产品中心中心ER图

电商通用型商品中心设计

3.3 产品中心整体架构图

电商通用型商品中心设计

4 产品类目

4.1 类目办理

产品类目分为两层:根底数据类目层(后台类目)、前台展现类目层(前台类目)。那为什么要将前、后台类目分开办理,而不是前、后台共用一套类目呢?
后台类目面向商家或供应链人员,产品特点、出售特点及品牌等许多数据都是在根底类目进步行办理;
前台类目面向用户,便利用户查找产品,还能够跟着运营需求去调整。比方并且跟着节日、时令季节变化,运营会常常改变前台类目。

4.2 后台类目

后台类目首要面向平台运营人员或商家,用于办理产品、特点和品牌等数据。
后台类目相对固定,确认了之后不会容易改变或删去,如果类目下挂载有产品,就不能删去或报废。
类目树的层次不能太深,一般三层或四层。如果太深,对于产品的办理不太便利。类目树中最后一层类目称为叶子类目,产品必须挂载于叶子类目下。

电商通用型商品中心设计

4.3 前台类目

前台类目首要面向用户,便利用户挑选查找产品,如图图所示。
前台类目能够依据运营需求,灵敏多变。所以处理产品的前端类目时,就应该供给多样化的前端类目来支撑。
前台类目可支撑不同客户端的设置。PC端、H5端、APP端等
前台类目不同于固定的后台类目,编辑很灵敏、可堆叠、可删去、可随时变化,守时收效。

电商通用型商品中心设计

4.4 类目表结构规划

4.1.1 后端类目表规划

 CREATE TABLE `category` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(32) NOT NULL COMMENT '类目称号',
  `parent_id` bigint(11) NOT NULL COMMENT '父id',
  `leaf` tinyint(4) NOT NULL COMMENT '是否叶子节点 1是 0不是',
  `level` tinyint(4) NOT NULL COMMENT '类目层级',
  `path` varchar(128) DEFAULT NULL COMMENT '完好父级途径:父父id_父id',
  `sort` int(11) unsigned NOT NULL COMMENT '排序字段',
  `status` tinyint(4) NOT NULL COMMENT '分类状况:1上架 2下架',
  `del` tinyint(4) unsigned NOT NULL COMMENT '是否删去',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='类目表';

4.4.2 后端类目数据展现

电商通用型商品中心设计

5 SKU

SKU算是电商中最根底的概念,SKU是最小库存单元。

以iPhone 8 Plus(SPU)为例,这个SPU的标准有多种(色彩包含金 色、白色、黑色、玫瑰金、银色、亮黑、赤色等6种;内存包含32G、 128G、256G等3种),对应18(即36)种SKU。比方“iPhone 7 Plus白 色32G”、“iPhone 7 Plus黑色32G”这两个SKU都能具化到什物。库房体系、收购体系、库存体系等体系都是首要办理SKU。

5.1 sku表规划

CREATE TABLE `sku` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sku_no` varchar(32) DEFAULT '' COMMENT '产品序列号',
  `sku_name` varchar(50) DEFAULT NULL COMMENT '产品称号',
  `sku_description` varchar(256) DEFAULT NULL COMMENT '产品描述',
  `sku_type` tinyint(4) DEFAULT NULL COMMENT '产品类型:1什物产品、2会员产品、3增值产品,4虚拟物品',
  `status` tinyint(4) NOT NULL COMMENT '状况 1未上架2.已上架 3.已下架',
  `sort` int(10) DEFAULT '0' COMMENT '排序',
  `boundle` tinyint(4) unsigned DEFAULT '0' COMMENT '是否组合产品 1是 0否',
  `create_by` int(11) unsigned NOT NULL COMMENT '创立人ID',
  `update_by` int(11) unsigned DEFAULT NULL COMMENT '修正人ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY(`id`) USING BTREE,
  UNIQUE KEY `uk_sku_no` (`sku_no`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '产品表'

5.2 sku表数据

电商通用型商品中心设计

5.3 sku特点表

扩展性1:动态无限制创立特点数量。

CREATE TABLE `sku_attr` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `sku_no` varchar(32) DEFAULT '' COMMENT '产品序列号',
  `sku_attrs` json DEFAULT NULL COMMENT 'sku特点(产品特点)',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY(`id`) USING BTREE,
  UNIQUE KEY `uk_sku_no` (`sku_no`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '产品特点表'

5.4 sku特点数据

电商通用型商品中心设计

不创立新字段,还能够用sql查询,你得到了什么启示?

5.5 sku动态表单

扩展性2:依据不同类目加载不同特点烘托动态表单。

电商通用型商品中心设计

将一组特点挂载到类目来完成动态表单,你得到了什么启示?

5.6 产品类目相关

CREATE TABLE `category_to_goods` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `category_id` bigint(20) DEFAULT NULL COMMENT '类目id',
  `goods_no` varchar(32) DEFAULT NULL COMMENT '产品编号',
  `goods_type` tinyint(4) DEFAULT NULL COMMENT '产品类型:1sku、2spu',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  `is_deleted` tinyint(4) unsigned NOT NULL DEFAULT '0' COMMENT '是否删去:0-否,1-是',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 COMMENT='类目产品相关表';

5.7 组合sku联系表

CREATE TABLE `bundle_to_sku` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `goods_id` bigint(20) DEFAULT NULL COMMENT '产品id, 组合产品id',
  `bundle_id` bigint(20) DEFAULT NULL COMMENT '组合产品id',
  `quantity` int(11) DEFAULT NULL COMMENT '产品数量',
  `entity_type` tinyint(4) DEFAULT '1' COMMENT '产品的类型:1sku,2组合产品',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  `is_deleted` tinyint(1) unsigned NOT NULL DEFAULT '0' COMMENT '是否删去:0-否,1-是',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_bundle_to_goods_bundle_id_index` (`bundle_id`) USING BTREE,
  KEY `idx_bundle_to_goods_object_id_entity_type_index` (`object_id`,`entity_type`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='套装和sku相关表||套装和spu相关表';

5.8 组合sku联系数据

电商通用型商品中心设计

sku数据

电商通用型商品中心设计

5.9 创立组合产品表单

电商通用型商品中心设计

6 特点

6.1 特点办理

为了便利产品办理,我们需求在体系中建立一套特点库。在界说一个特点时,需求挂载在类目下,区别特点分类(要害特点、出售特点、非要害特点、特别特点),并确认特点值、显示类型(单选、多选、可自界说)、是否必填。

电商通用型商品中心设计

6.2 特点的应用场景

  1. 增加产品时分的产品表单烘托。在增加产品时,可经过挑选叶子类目,将挂载到叶子类意图特点烘托到表单上。
  2. 在客户端对可依据不同的特点进行查找、挑选产品。
  3. 在spu页面用户可利用产品标准(出售特点)来定位出不同的sku。
  4. 产品概况页面可展现出后台装备的特点参数数据。

电商通用型商品中心设计

6.3 特点表规划

CREATE TABLE `attribute` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(32) NOT NULL DEFAULT '' COMMENT '特点称号',
  `code` varchar(32) DEFAULT NULL COMMENT '特点代码(非必填)',
  `attr_type` tinyint(4) NOT NULL COMMENT '特点应用:1产品特点,2出售特点,3特别特点',
  `value_type` tinyint(4) DEFAULT NULL COMMENT '特点值类型:1:字符串,2:数字',
  `fill_type` tinyint(4) NOT NULL COMMENT '填写类型:1填写型(字符),2填写型(仅整数数字),3挑选型(单选值,非id)4挑选型(多选值,非id),5多输入框展现型',
  `is_filter` tinyint(4) unsigned NOT NULL COMMENT '是否支撑前台挑选:0否 1是',
  `status` tinyint(11) NOT NULL COMMENT '状况:1 未上架 2已上架 3已下架',
  `is_deleted` tinyint(4) unsigned NOT NULL COMMENT '是否删去',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修正时刻',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='特点表';

6.4 特点表数据

电商通用型商品中心设计

6.5 特点枚举表规划

CREATE TABLE `attribute_enum` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `attr_id` bigint(20) NOT NULL COMMENT '特点id',
  `attr_code` varchar(32) DEFAULT NULL,
  `enum_code` bigint(11) DEFAULT NULL COMMENT 'enumcode',
  `enum_value` varchar(32) NOT NULL COMMENT '特点枚举值称号',
  `sort` int(11) NOT NULL COMMENT '排序',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='特点枚举表';

6.6 特点枚举表数据

电商通用型商品中心设计

6.7 特点和类目相关表规划

CREATE TABLE `category_to_attr` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `category_id` bigint(11) NOT NULL COMMENT '分类id',
  `attr_id` bigint(20) NOT NULL COMMENT '特点id',
  `is_required` tinyint(4) unsigned NOT NULL COMMENT '是否必填',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='分类特点相关表';

6.8 动态生成特点表单

当特点库建立完成后,就会被各个叶子类目调用,增加产品时就需求填写这些特点,产品就有了载体,如图所示。

电商通用型商品中心设计

依据这些特点便能确认产品的唯一性(SKU)。 淘宝的产品特点(类目“男装”→“风衣”) 特别需求注意的是一些标准特点(如色彩、尺码等)。许多产品有 多标准,例如衣服、鞋子等。以一双男鞋为例,有色彩(假定白、红、 黑3种色彩),有尺码(从39~44共6种尺码),那么这个SPU(男鞋) 下面就有18个SKU。这些SKU的特点除了标准特点外,其他特点都是一 致的,所以在新建产品时,可聚合到一同,共用其他特点。

7 SPU

7.1 SPU概念

SPU 是标准化产品单元。SPU与SKU的联系有许多种,能够一对多、一对一, 绝大部分SPU与SKU都是一对一,多标准的SPU和SKU之间是经过标准特点来连接的。SPU的库存是由其对应的SKU库存共同决定的。

电商通用型商品中心设计

以iPhone 11(SPU)为例,这个SPU的标准有多种(色彩包含白色、黑色、黄金、紫色、绿色、赤色等6种;内存包含32G、 128G、256G等3种),对应18(即36)种SKU。比方“iPhone 11 白色 64G”、“iPhone 11 黑色 64G”这两个SKU都能具化到什物。库房体系、收购体系、库存体系等体系都是首要办理SKU。 在日常运营中也很常见一个SKU对应多个SPU。

电商通用型商品中心设计

7.2 SPU和标准规划

CREATE TABLE `spu` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `name` varchar(64) DEFAULT NULL COMMENT 'spu称号',
  `detail` varchar(256) DEFAULT NULL COMMENT '产品介绍',
  `status` tinyint(4) DEFAULT NULL COMMENT '状况 1未上架2.已上架 2.已下架',
  `spu_specs` json DEFAULT NULL COMMENT '产品标准',
  `creator_id` bigint(20) DEFAULT NULL COMMENT '创立者',
  `is_deleted` tinyint(1) unsigned DEFAULT '0' COMMENT '是否删去,0:未删去 1:已删去',
  `sort` int(10) DEFAULT '0' COMMENT '排序',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='spu';

7.3 SPU和标准数据

电商通用型商品中心设计

sku特点数据

电商通用型商品中心设计

spu表单图片

电商通用型商品中心设计

7.4 spu和sku相关表

CREATE TABLE `spu_to_sku` (
  `id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',
  `sku_no` varchar(32) NOT NULL DEFAULT '' COMMENT 'sku id',
  `spu_no` varchar(32) NOT NULL DEFAULT '' COMMENT 'spu id',
  `is_deleted` tinyint(1) DEFAULT '0' COMMENT '是否删去,0:未删去 1:已删去',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_spu_to_sku` (`spu_no`,`sku_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COMMENT='spu产品相关表';

8 价格规划

价格包含:成本价、原价、售卖价、定金、膨胀金等会跟着需求的不断增加,尤其是一些在线教育等垂直职业电商对金额会有各种玩法。

CREATE TABLE `sku_price` (
  `id` bigint(11) NOT NULL AUTO_INCREMENT,
  `sku_id` bigint(11) unsigned NOT NULL COMMENT '产品id',
  `sku_no` varchar(20) NOT NULL DEFAULT '' COMMENT '产品编号',
  `sku_type` tinyint(4) NOT NULL COMMENT '产品类型: 1单sku 2组合sku',
  `sub_goods` tinyint(4) NOT NULL COMMENT '是否子产品:0否1是',
  `bundle_id` bigint(20) DEFAULT NULL COMMENT '组合产品id 默许 空',
  `price` decimal(10, 2) NOT NULL COMMENT '价格',
  `price_type` varchar(32) NOT NULL COMMENT '价格类型枚举(1.产品原价REAL_PRICE 2.售卖价SELL_PRICE 3.售卖底价... )',
  `currency_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '货币类型:1人民币 2虚拟币',
  `enable` tinyint(4) unsigned DEFAULT '1' COMMENT '是否启用 0 不启用 1  启用',
  `create_by` int(11) unsigned NOT NULL COMMENT '创立人ID',
  `update_by` int(11) unsigned DEFAULT NULL COMMENT '修正人ID',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创立时刻',
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时刻',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_sku_id` (`sku_id`) USING BTREE,
  KEY `idx_sku_no` (`sku_no`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8mb4 COMMENT = '产品价格表' "

扩展性3:不创立新字段,同一个产品可支撑多种价格和货币种类

9 总结

本文详细介绍了产品中心规划扩展性规划思维,并在规划方面做了各维度剖析。

扩展性总结如下:

动态无限制创立特点数量。
依据不同类目加载不同特点烘托动态表单。
不创立新字段,同一个产品可支撑多种价格和货币种类。

期望自己总结的扩展性思维能够让我们在开发过程中有所启示。

本文正在参与「金石计划」