Youlai-Mall 商品管理系统数据库设计解析

Youlai-Mall 商品管理系统数据库设计解析

【免费下载链接】youlai-mall youlaitech/youlai-mall: youlai-mall 是优莱科技开发的一个开源商城系统,基于Java Spring Boot技术栈构建,集成了多种电商功能模块,如商品管理、订单处理、用户权限控制等,可用于快速搭建在线购物平台。 【免费下载链接】youlai-mall 项目地址: https://gitcode.com/gh_mirrors/yo/youlai-mall

概述

本文将深入分析 Youlai-Mall 电商平台中商品管理模块(PMS)的数据库设计,帮助开发者理解其核心数据结构和关系。该设计采用 MySQL 8.0 作为数据库引擎,包含了商品分类、品牌、规格属性以及商品信息等核心表结构。

数据库表结构详解

1. 商品品牌表(pms_brand)

商品品牌表用于存储平台销售商品的品牌信息:

CREATE TABLE `pms_brand` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '品牌名称',
  `logo_url` varchar(255) NULL DEFAULT NULL COMMENT 'LOGO图片',
  `sort` int NULL DEFAULT NULL COMMENT '排序',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品品牌表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • name: 品牌名称,如"小米"、"华为"等
  • logo_url: 品牌LOGO的URL地址
  • sort: 用于品牌展示时的排序字段

示例数据

INSERT INTO `pms_brand` VALUES (1, '有来', 'http://a.youlai.tech:9000/default/5409e3deb5a14b8fa8cb4275dee0e25d.png', 1, '2021-07-11 19:56:58', '2021-07-11 20:02:54');
INSERT INTO `pms_brand` VALUES (10, '小米', 'http://a.youlai.tech:9000/default/6a5a606fc60742919149a7861bf26cd5.jpg', 2, '2022-03-05 16:12:16', '2022-03-05 16:12:16');

2. 商品分类表(pms_category)

商品分类表采用树形结构设计,支持多级分类:

CREATE TABLE `pms_category` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '商品分类名称',
  `parent_id` bigint NOT NULL COMMENT '父级ID',
  `level` int NULL DEFAULT NULL COMMENT '层级',
  `icon_url` varchar(255) NULL DEFAULT NULL COMMENT '图标地址',
  `sort` int NULL DEFAULT NULL COMMENT '排序',
  `visible` tinyint(1) NULL DEFAULT 1 COMMENT '显示状态:( 0:隐藏 1:显示)',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品分类表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • parent_id: 父分类ID,0表示一级分类
  • level: 分类层级(1-一级分类,2-二级分类,3-三级分类)
  • visible: 控制分类是否在前台显示

示例数据

INSERT INTO `pms_category` VALUES (3, '手机配件', 0, 1, NULL, 2, 1, NULL, '2022-07-07 22:56:53');
INSERT INTO `pms_category` VALUES (4, '智能手机', 3, 2, NULL, 1, 1, NULL, NULL);
INSERT INTO `pms_category` VALUES (5, '5g手机', 4, 3, 'https://oss.youlai.tech/default/6ffb37110ac2434a9882b9e8968b2887.jpg', 1, 1, NULL, '2022-07-08 00:28:38');

3. 商品属性表(pms_category_attribute)

该表存储商品分类的属性信息,包括规格属性和参数属性:

CREATE TABLE `pms_category_attribute` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `category_id` bigint NOT NULL COMMENT '分类ID',
  `name` varchar(64) NOT NULL COMMENT '属性名称',
  `type` tinyint NOT NULL COMMENT '类型(1:规格;2:属性;)',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `fk_pms_attr_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品属性表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • type: 1表示规格(如颜色、尺寸等),2表示参数(如上市时间等)
  • category_id: 关联到商品分类表

示例数据

INSERT INTO `pms_category_attribute` VALUES (34, 5, '颜色', 1, '2021-07-11 17:57:06', '2022-07-01 00:08:19');
INSERT INTO `pms_category_attribute` VALUES (35, 5, '规格', 1, '2021-07-11 18:00:06', '2022-07-01 00:08:19');
INSERT INTO `pms_category_attribute` VALUES (36, 5, '上市时间', 2, '2021-07-11 18:00:08', '2022-06-01 17:41:05');

4. 商品表(pms_spu)

SPU(Standard Product Unit)表存储商品的基本信息:

CREATE TABLE `pms_spu` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name` varchar(64) NOT NULL COMMENT '商品名称',
  `category_id` bigint NOT NULL COMMENT '商品类型ID',
  `brand_id` bigint NULL DEFAULT NULL COMMENT '商品品牌ID',
  `origin_price` bigint NOT NULL COMMENT '原价【起】',
  `price` bigint NOT NULL COMMENT '现价【起】',
  `sales` int NULL DEFAULT 0 COMMENT '销量',
  `pic_url` varchar(255) NULL DEFAULT NULL COMMENT '商品主图',
  `album` json NULL COMMENT '商品图册',
  `unit` varchar(16) NULL DEFAULT NULL COMMENT '单位',
  `description` varchar(255) NULL DEFAULT NULL COMMENT '商品简介',
  `detail` text NULL COMMENT '商品详情',
  `status` tinyint NULL DEFAULT 1 COMMENT '商品状态(0:下架 1:上架)',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `fk_pms_spu_pms_brand`(`brand_id` ASC) USING BTREE,
  INDEX `fk_pms_spu_pms_category`(`category_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • album: 使用JSON类型存储商品相册图片URL数组
  • detail: 存储商品详情HTML内容
  • status: 控制商品上下架状态

示例数据

INSERT INTO `pms_spu` VALUES (1, 'Galaxy Z Fold5', 5, 10, 599900, 599900, 1, 'https://shop-image.samsung.com.cn/productv5/img/2023/07/26/64c0e30fe4b08db29258c50c.png', '[\"https://shop-image.samsung.com.cn/productv5/img/2023/07/26/64c0e30fe4b08db29258c50c.png\"]', '台', '好快,好稳,\n好一次强上加强。', '<p><img src=\"https://shop-image.samsung.com.cn/productv5/img/2023/11/03/65449d3ee4b08db20823bcbe.jpg\" alt=\"\" data-href=\"\" style=\"width: 449.00px;height: 449.00px;\"/></p>', 1, NULL, '2022-07-03 14:16:16');

5. 商品SKU表(pms_sku)

SKU(Stock Keeping Unit)表存储商品的具体规格和库存信息:

CREATE TABLE `pms_sku` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `sku_sn` varchar(64) NULL DEFAULT NULL COMMENT '商品编码',
  `spu_id` bigint NOT NULL COMMENT 'SPU ID',
  `name` varchar(128) NULL DEFAULT NULL COMMENT '商品名称',
  `spec_ids` varchar(255) NULL DEFAULT NULL COMMENT '商品规格值,以英文逗号(,)分割',
  `price` bigint NULL DEFAULT NULL COMMENT '商品价格(单位:分)',
  `stock` int UNSIGNED NULL DEFAULT NULL COMMENT '库存数量',
  `locked_stock` int NULL DEFAULT NULL COMMENT '库存锁定数量',
  `pic_url` varchar(255) NULL DEFAULT NULL COMMENT '商品图片地址',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `fk_pms_sku_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品库存表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • spec_ids: 存储该SKU对应的规格ID组合,格式如"1_3"表示颜色ID为1,规格ID为3
  • price: 以分为单位存储,避免浮点数计算精度问题
  • locked_stock: 已锁定库存(如已下单未支付的商品数量)

示例数据

INSERT INTO `pms_sku` VALUES (1, 'sn001', 1, '黑 6+128g', '1_3', 399900, 990, 150, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', '2021-08-08 00:43:26', '2022-07-03 14:16:16');

6. 商品属性关联表(pms_spu_attribute)

该表存储商品的具体属性值:

CREATE TABLE `pms_spu_attribute` (
  `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键',
  `spu_id` bigint NOT NULL COMMENT '产品ID',
  `attribute_id` bigint NULL DEFAULT NULL COMMENT '属性ID',
  `name` varchar(64) NOT NULL COMMENT '属性名称',
  `value` varchar(128) NOT NULL COMMENT '属性值',
  `type` tinyint NOT NULL COMMENT '类型(1:规格;2:属性;)',
  `pic_url` varchar(255) NULL DEFAULT NULL COMMENT '规格图片',
  `create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `fk_pms_spu_attribute_pms_attr`(`name` ASC) USING BTREE,
  INDEX `fk_pms_spu_attribute_pms_spu`(`spu_id` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '商品属性/规格表' ROW_FORMAT = DYNAMIC;

关键字段说明

  • 规格类型的属性会有对应的图片URL
  • 参数类型的属性只包含名称和值

示例数据

INSERT INTO `pms_spu_attribute` VALUES (1, 1, 34, '颜色', '黑', 1, 'https://www.youlai.tech/files/default/c25b39470474494485633c49101a0f5d.png', NULL, '2022-07-03 14:16:16');
INSERT INTO `pms_spu_attribute` VALUES (5, 1, 36, '上市时间', '2021-07-17', 2, NULL, NULL, '2022-07-03 14:16:16');

数据库设计特点分析

  1. 价格存储设计:所有价格字段均以分为单位存储,使用bigint类型,避免浮点数计算带来的精度问题。

  2. 分类层级设计:采用parent_id+level的方式实现多级分类,便于查询和展示。

  3. 商品属性分离:将属性分为规格(影响SKU)和参数(不影响SKU)两类,设计更加清晰。

  4. JSON类型应用:在商品相册字段使用JSON类型,便于存储和查询数组结构数据。

  5. 库存管理:设计了库存和锁定库存字段,支持库存预占功能,防止超卖。

  6. 字符集选择:统一使用utf8mb4字符集,支持完整的Unicode字符,包括emoji表情。

实际应用建议

  1. 商品搜索优化:建议为商品名称、描述等字段添加全文索引,提升搜索性能。

  2. 库存操作:对库存字段的更新应使用乐观锁,避免并发问题。

  3. 价格展示:前端展示时需将存储的分转换为元,通常除以100即可。

  4. 分类查询:多级分类查询可使用递归CTE(MySQL 8.0+支持)提高查询效率。

  5. 属性管理:对于频繁变更的属性,可考虑使用EAV(实体-属性-值)模型,但会增加查询复杂度。

通过以上分析,可以看出 Youlai-Mall 的商品管理系统数据库设计考虑了电商平台的实际需求,结构清晰合理,既满足了功能需求,又考虑了性能因素,是一个值得参考的设计方案。

【免费下载链接】youlai-mall youlaitech/youlai-mall: youlai-mall 是优莱科技开发的一个开源商城系统,基于Java Spring Boot技术栈构建,集成了多种电商功能模块,如商品管理、订单处理、用户权限控制等,可用于快速搭建在线购物平台。 【免费下载链接】youlai-mall 项目地址: https://gitcode.com/gh_mirrors/yo/youlai-mall

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值