电商平台数据表设计

非淡泊无以明志,非宁静无以致远。这篇文章主要讲述电商平台数据表设计相关的知识,希望能为你提供帮助。


上级目录:??电商平台设计??
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. 索引与时间戳
  • 唯一索引
  • 组合索引
  • 时间戳
【电商平台数据表设计】


    推荐阅读