上级目录:电商平台设计

1. 表结构设计

1.1. 用户表

  • sql
-- ----------------------------
--  Table structure for `mmall_user`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_user`;
CREATE TABLE `mmall_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '用户表id',
  `username` varchar(50) NOT NULL COMMENT '用户名',
  `password` varchar(50) NOT NULL COMMENT '用户密码,MD5加密',
  `email` varchar(50) DEFAULT NULL,
  `phone` varchar(20) DEFAULT NULL,
  `question` varchar(100) DEFAULT NULL COMMENT '找回密码问题',
  `answer` varchar(100) DEFAULT NULL COMMENT '找回密码答案',
  `role` int(4) NOT NULL COMMENT '角色0-管理员,1-普通用户',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `update_time` datetime NOT NULL COMMENT '最后一次更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_name_unique` (`username`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8;

  • 模型
    在这里插入图片描述

  • 注意:

    1. 用户名使用唯一性索引,避免用户名重复
    2. 密码使用非对称性加密,无法在数据库看到对应用户密码,可以使用BCrypt或者MD5不可逆加密
    3. 主键为用户ID,且自增长值为22
    4. 角色直接使用字段,用户表与角色表符合多对一.

1.2. 分类表

  • sql
-- ----------------------------
--  Table structure for `mmall_category`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_category`;
CREATE TABLE `mmall_category` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '类别Id',
  `parent_id` int(11) DEFAULT NULL COMMENT '父类别id当id=0时说明是根节点,一级类别',
  `name` varchar(50) DEFAULT NULL COMMENT '类别名称',
  `status` tinyint(1) DEFAULT '1' COMMENT '类别状态1-正常,2-已废弃',
  `sort_order` int(4) DEFAULT NULL COMMENT '排序编号,同类展示顺序,数值相等则自然排序',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=100032 DEFAULT CHARSET=utf8;

  • 模型
    在这里插入图片描述

  • 注意:

  1. 考虑分类树状的递归条件,假设父类别为0时为根节点,那么这就是停止递归的条件
  2. 增加类别状态,默认为1即正常
  3. 增加展示顺序,按照数值大小排序
  4. 主键为分类ID,自增长值为100032

1.3. 产品表

  • sql
-- ----------------------------
--  Table structure for `mmall_product`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_product`;
CREATE TABLE `mmall_product` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品id',
  `category_id` int(11) NOT NULL COMMENT '分类id,对应mmall_category表的主键',
  `name` varchar(100) NOT NULL COMMENT '商品名称',
  `subtitle` varchar(200) DEFAULT NULL COMMENT '商品副标题',
  `main_image` varchar(500) DEFAULT NULL COMMENT '产品主图,url相对地址',
  `sub_images` text COMMENT '图片地址,json格式,扩展用',
  `detail` text COMMENT '商品详情',
  `price` decimal(20,2) NOT NULL COMMENT '价格,单位-元保留两位小数',
  `stock` int(11) NOT NULL COMMENT '库存数量',
  `status` int(6) DEFAULT '1' COMMENT '商品状态.1-在售 2-下架 3-删除',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=30 DEFAULT CHARSET=utf8;

  • 模型
    在这里插入图片描述

  • 注意:

  1. 添加分类id,产品表与分类表符合多对一的特性,所以直接在表内加一个字段
  2. 产品主图可能用不上
  3. 添加图片地址,使用JSON格式确实是很方便存储多张图片,使用文件服务器或者OSS保存链接即可
  4. 添加商品详情,直接使用富文本对文件详情进行编辑
  5. 添加库存数量,实时更新
  6. 添加商品状态,默认1即在售
  7. 添加主键为产品ID
  8. 添加商品价格,使用decimal(20,2)类型,即18整数2小数的高精度类型

1.4. 购物车表

  • sql
-- ----------------------------
--  Table structure for `mmall_cart`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_cart`;
CREATE TABLE `mmall_cart` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) NOT NULL,
  `product_id` int(11) DEFAULT NULL COMMENT '商品id',
  `quantity` int(11) DEFAULT NULL COMMENT '数量',
  `checked` int(11) DEFAULT NULL COMMENT '是否选择,1=已勾选,0=未勾选',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `user_id_index` (`user_id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=146 DEFAULT CHARSET=utf8;

  • 模型
    在这里插入图片描述

  • 注意:

  1. 增加用户ID,持久化购物车所属用户
  2. 增加商品ID
  3. 增加是否勾选项,默认为1,即已勾选
  4. 增加选购商品数量,不能为空
  5. 添加用户ID索引,提高查询效率
  6. 主键为购物车ID

1.5. 支付信息表

  • sql
-- ----------------------------
--  Table structure for `mmall_pay_info`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_pay_info`;
CREATE TABLE `mmall_pay_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `order_no` bigint(20) DEFAULT NULL COMMENT '订单号',
  `pay_platform` int(10) DEFAULT NULL COMMENT '支付平台:1-支付宝,2-微信',
  `platform_number` varchar(200) DEFAULT NULL COMMENT '支付宝支付流水号',
  `platform_status` varchar(20) DEFAULT NULL COMMENT '支付宝支付状态',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8;

  • 项目
    在这里插入图片描述

  • 注意:

    1. 增加用户ID,可查看该用户所有类型支付信息
    2. 增加订单号,可以查看订单的支付信息
    3. 增加支付平台,支付宝与微信
    4. 增加支付宝支付流水号,由支付宝提供信息
    5. 增加支付宝支付状态.有支付宝提供信息
    6. 主键为支付信息ID

1.6. 订单表

  • sql
-- ----------------------------
--  Table structure for `mmall_order`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_order`;
CREATE TABLE `mmall_order` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单id',
  `order_no` bigint(20) DEFAULT NULL COMMENT '订单号',
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `shipping_id` int(11) DEFAULT NULL,
  `payment` decimal(20,2) DEFAULT NULL COMMENT '实际付款金额,单位是元,保留两位小数',
  `payment_type` int(4) DEFAULT NULL COMMENT '支付类型,1-在线支付',
  `postage` int(10) DEFAULT NULL COMMENT '运费,单位是元',
  `status` int(10) DEFAULT NULL COMMENT '订单状态:0-已取消-10-未付款,20-已付款,40-已发货,50-交易成功,60-交易关闭',
  `payment_time` datetime DEFAULT NULL COMMENT '支付时间',
  `send_time` datetime DEFAULT NULL COMMENT '发货时间',
  `end_time` datetime DEFAULT NULL COMMENT '交易完成时间',
  `close_time` datetime DEFAULT NULL COMMENT '交易关闭时间',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `order_no_index` (`order_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=118 DEFAULT CHARSET=utf8;

  • 模型

在这里插入图片描述

  • 注意:
  1. 添加订单号,唯一性约束
  2. 添加用户ID,查看用户所有i订单
  3. shpping_id,对应下单接受地址
  4. 增加实际付款金额,不能与产品金额联动
  5. 增加支付类型,只有在线支付
  6. 增加运费,包邮,单位为元
  7. 增加订单状态,包括已取消,已付款,已发货,交易成功,交易关闭,通过数字大小判断
  8. 增加支付时间,在支付宝完成支付之后,由支付宝回调
  9. 增加发货时间,商家确认付款后,自己选择发货
  10. 增加交易完成时间,即收货时
  11. 增加交易关闭时间,一般半小时未支付,取消订单
  12. 主键为订单ID

1.7. 订单明细表

  • sql
-- ----------------------------
--  Table structure for `mmall_order_item`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_order_item`;
CREATE TABLE `mmall_order_item` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '订单子表id',
  `user_id` int(11) DEFAULT NULL,
  `order_no` bigint(20) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL COMMENT '商品id',
  `product_name` varchar(100) DEFAULT NULL COMMENT '商品名称',
  `product_image` varchar(500) DEFAULT NULL COMMENT '商品图片地址',
  `current_unit_price` decimal(20,2) DEFAULT NULL COMMENT '生成订单时的商品单价,单位是元,保留两位小数',
  `quantity` int(10) DEFAULT NULL COMMENT '商品数量',
  `total_price` decimal(20,2) DEFAULT NULL COMMENT '商品总价,单位是元,保留两位小数',
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `order_no_index` (`order_no`) USING BTREE,
  KEY `order_no_user_id_index` (`user_id`,`order_no`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=135 DEFAULT CHARSET=utf8;
  • 模型
    在这里插入图片描述

  • 注意:

  1. 增加用户ID,一个冗余字段,可以提高关于用户的查询效率并且避免表之间的关联
  2. 增加订单号,订单与订单明细一对多的关系,直接插入字段
  3. 增加商品ID,这里一个订单根据商品种类会有多个订单明细
  4. 增加商品图片地址,使用一张图即可,或许这就是主图的用处
  5. 增加商品名称,不能联动
  6. 增加商品单价,不能与商品实时单价联动,使用decimal(20,2)高精度类型
  7. 增加商品数量
  8. 增加商品总价,是商品单价与商品数量的乘积,使用decimal(20,2)高精度类型
  9. 使用订单号索引,提高搜索效率
  10. 使用订单号与用户组合索引,提高搜索效率
  11. 主键为订单明细ID

1.8. 收货地址表

  • sql
-- ----------------------------
--  Table structure for `mmall_shipping`
-- ----------------------------
DROP TABLE IF EXISTS `mmall_shipping`;
CREATE TABLE `mmall_shipping` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL COMMENT '用户id',
  `receiver_name` varchar(20) DEFAULT NULL COMMENT '收货姓名',
  `receiver_phone` varchar(20) DEFAULT NULL COMMENT '收货固定电话',
  `receiver_mobile` varchar(20) DEFAULT NULL COMMENT '收货移动电话',
  `receiver_province` varchar(20) DEFAULT NULL COMMENT '省份',
  `receiver_city` varchar(20) DEFAULT NULL COMMENT '城市',
  `receiver_district` varchar(20) DEFAULT NULL COMMENT '区/县',
  `receiver_address` varchar(200) DEFAULT NULL COMMENT '详细地址',
  `receiver_zip` varchar(6) DEFAULT NULL COMMENT '邮编',
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;

  • 模型
    在这里插入图片描述

注意:

  1. 增加用户ID.提高查询效率
  2. 其他基本都是详细地址

2. 表关系设计

2.1. 用户表

注册:存入用户表

  • 登录:读取用户表

2.2. 分类表

  • 获取分类树

2.3. 产品表

  • 根据分类表中递归最下等该分类获取产品
  • 与分类表是多对一的关系

2.4. 购物车表

  • 用户ID,产品ID分别与用户表,产品表对应
  • 使用用户ID获取对应用户的购物车详情
  • 使用产品ID获取对应的产品信息

2.5.订单表

  • 提交购物车后,生成订单
  • 使用收获地址ID,拿到具体的收获地址
  • 使用用户ID,查询对应用户订单
  • 使用产品ID获取对应产品单价

2.6. 订单详情表

  • 根据具体订单号,获取多个订单详情
  • 使用与订单相同的用户ID
  • 与订单表是多对一的关系

2.7. 支付信息表

  • 使用订单号获取具体的订单支付详情

2.8. 收货地址表

  • 使用用户ID,获取对应用户的所有收货地址
  • 与用户是多对一的关系

3. 索引与时间戳

  • 唯一索引
  • 组合索引
  • 时间戳
Logo

电商企业物流数字化转型必备!快递鸟 API 接口,72 小时快速完成物流系统集成。全流程实战1V1指导,营造开放的API技术生态圈。

更多推荐