Skip to content

1.商品分类

CREATE TABLE `product_category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '分类编号',
  `parent_id` bigint NOT NULL COMMENT '父分类编号',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称',
  `pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '移动端分类图',
  `sort` int DEFAULT '0' COMMENT '分类排序',
  `status` tinyint NOT NULL COMMENT '开启状态',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=60 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品分类';

① 分类目前支持 2 级分类,即 parent_id 为 0 的是一级分类,否则是二级分类。

② pic_url 分类图片,一级、二级分类都需要设置。

2.商品属性

属性项

CREATE TABLE `product_property` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
  `status` tinyint DEFAULT NULL COMMENT '状态',
  `remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`id`) USING BTREE,
  KEY `idx_name` (`name`(32)) USING BTREE COMMENT '规格名称索引'
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品属性项';

属性【项】只是基于 name 字段存储一条唯一记录,具体商品怎么使用它,可以看 《【商品】商品信息》 文档。

属性值

CREATE TABLE `product_property_value` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
  `property_id` bigint DEFAULT NULL COMMENT '属性项的编号',
  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '名称',
  `status` tinyint DEFAULT NULL COMMENT '状态',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品属性值';

属性【值】只是基于 property_id + name 字段存储一条唯一记录 alt text

3.商品SPU与SKU

分成商品 SPU 和商品 SKU 两个表。 alt text

CREATE TABLE `product_sku` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  
  `spu_id` bigint NOT NULL COMMENT 'spu编号',
  
  `properties` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '属性数组,JSON 格式 [{propertId: , valueId: }, {propertId: , valueId: }]',
  
  `price` int NOT NULL DEFAULT '-1' COMMENT '商品价格,单位:分',
  `market_price` int DEFAULT NULL COMMENT '市场价,单位:分',
  `cost_price` int NOT NULL DEFAULT '-1' COMMENT '成本价,单位: 分',
  `bar_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT 'SKU 的条形码',
  `pic_url` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '图片地址',
  `stock` int DEFAULT NULL COMMENT '库存',
  `weight` double DEFAULT NULL COMMENT '商品重量,单位:kg 千克',
  `volume` double DEFAULT NULL COMMENT '商品体积,单位:m^3 平米',
  
  `first_brokerage_price` int DEFAULT NULL COMMENT '一级分销的佣金,单位:分',
  `second_brokerage_price` int DEFAULT NULL COMMENT '二级分销的佣金,单位:分',
  
  `sales_count` int DEFAULT NULL COMMENT '商品销量',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品sku';

① spu_id 字段:商品 SPU 的编号,关联 product_spu 表的 id 字段。

② properties 字段:商品属性,JSON 格式,例如:

alt text

[
  {
    "propertyId": 1,
    "propertyName": "颜色",
    "valueId": 5,
    "valueName": "黑色"
  },
  {
    "propertyId": 3,
    "propertyName": "版本",
    "valueId": 8,
    "valueName": "CH510"
  }
]

很明显,property_id 对应 product_property 表的 id 字段,value_id 对应 product_property_value 表的 id 字段。

那么为什么要冗余 propertyName、valueName 字段呢?主要是为了方便查询,不用再关联 product_property、product_property_value 表,嘿嘿~

③ price、market_price、cost_price、bar_code、weight、volume、pic_url 字段,都是商品 SKU 的基本信息。

④ sales_count 字段:商品销量,每次用户下单时,更新该字段。

⑤ first_brokerage_price、second_brokerage_price 字段:一级分销、二级分销的佣金,可能未来会挪到【营销】模块下,目前不用特别关注。

product_spu

CREATE TABLE `product_spu` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品 SPU 编号,自增',
  `name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品名称',
  `keyword` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '关键字',
  `introduction` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '商品简介',
  `description` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci COMMENT '商品详情',
  `category_id` bigint NOT NULL COMMENT '商品分类编号',
  `brand_id` int DEFAULT NULL COMMENT '商品品牌编号',
  `pic_url` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '商品封面图',
  `slider_pic_urls` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '商品轮播图地址\n 数组,以逗号分隔\n 最多上传15张',
  
  `status` tinyint NOT NULL COMMENT '商品状态: 0 上架(开启) 1 下架(禁用)-1 回收',
  
  `spec_type` bit(1) DEFAULT NULL COMMENT '规格类型:0 单规格 1 多规格',
  `price` int NOT NULL DEFAULT '-1' COMMENT '商品价格,单位使用:分',
  `market_price` int DEFAULT NULL COMMENT '市场价,单位使用:分',
  `cost_price` int NOT NULL DEFAULT '-1' COMMENT '成本价,单位: 分',
  `stock` int NOT NULL DEFAULT '0' COMMENT '库存',
  
  `delivery_types` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '配送方式数组',
  `delivery_template_id` bigint DEFAULT NULL COMMENT '物流配置模板编号',
  
  `give_integral` int NOT NULL DEFAULT '0' COMMENT '赠送积分',
  `sales_count` int DEFAULT '0' COMMENT '商品销量',
  `virtual_sales_count` int DEFAULT '0' COMMENT '虚拟销量',
  `browse_count` int DEFAULT '0' COMMENT '商品点击量',
  `sort` int NOT NULL DEFAULT '0' COMMENT '排序字段',

  `sub_commission_type` bit(1) DEFAULT NULL COMMENT '分销类型',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=640 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='商品spu';

4.商品评价

CREATE TABLE `product_comment` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '评价编号,主键自增',
  
  `user_id` bigint NOT NULL COMMENT '评价人的用户编号,关联 MemberUserDO 的 id 编号',
  `user_nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '评价人名称',
  `user_avatar` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '评价人头像',
  `anonymous` bit(1) NOT NULL COMMENT '是否匿名',
  
  `order_id` bigint DEFAULT '0' COMMENT '交易订单编号,关联 TradeOrderDO 的 id 编号',
  `order_item_id` bigint DEFAULT '0' COMMENT '交易订单项编号,关联 TradeOrderItemDO 的 id 编号',
  
  `spu_id` bigint NOT NULL COMMENT '商品 SPU 编号,关联 ProductSpuDO 的 id',
  `spu_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品 SPU 名称',
  `sku_id` bigint NOT NULL COMMENT '商品 SKU 编号,关联 ProductSkuDO 的 id 编号',
  `sku_pic_url` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '图片地址',
  `sku_properties` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '属性数组,JSON 格式 [{propertId: , valueId: }, {propertId: , valueId: }]',
  
  `scores` tinyint NOT NULL COMMENT '评分星级1-5分',
  `description_scores` tinyint NOT NULL COMMENT '描述星级 1-5 星',
  `benefit_scores` tinyint NOT NULL COMMENT '服务星级 1-5 星',
  `content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '评价内容',
  `pic_urls` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '评价图片地址数组',
  
  `visible` bit(1) DEFAULT NULL COMMENT '是否可见,true:显示false:隐藏',
  `reply_status` bit(1) DEFAULT b'0' COMMENT '商家是否回复',
  `reply_user_id` bigint DEFAULT NULL COMMENT '回复管理员编号,关联 AdminUserDO 的 id 编号',
  `reply_content` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商家回复内容',
  `reply_time` datetime DEFAULT NULL COMMENT '商家回复时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='商品评价';

① user_id、user_nickname、user_avatar、anonymous 字段,会员用户相关信息。

② order_id、order_item_id 字段,交易订单相关信息。下单的每个订单项(商品),都可以评价一次,所以这里可以看到 order_item_id 字段。

③ spu_id、spu_name、sku_id、sku_pic_url、sku_properties 字段,商品 SPU、SKU 相关信息。通过冗余这些商品字段,可以减少关联查询,提高查询效率。

④ description_scores、benefit_scores、content、pic_urls 字段,会员用户的评价信息。而 score 字段是 description_scores、benefit_scores 两个字段的平均值。

⑤ reply_status、reply_user_id、reply_content、reply_time 字段,商家回复相关信息。

visible 字段,控制评价在 uni-app 是否可见,默认为 true,可以通过管理后台修改。