1. 数据库概述
数据库名称: mall
字符集: utf8mb4
排序规则: utf8mb4_general_ci
数据库引擎: InnoDB
本数据库为商城小程序系统提供数据存储支持,包含用户管理、商品管理、订单管理、购物车、地址管理等核心功能模块。
2. 数据库表关系图
admin_user int id PK varchar username varchar password tinyint status datetime create_time datetime update_time user int id PK varchar openid varchar nickname varchar avatar_url datetime create_time datetime update_time category int id PK varchar name varchar image_url int sort datetime create_time datetime update_time goods int id PK int category_id FK varchar name decimal price int stock varchar image_url text detail tinyint status tinyint is_recommend datetime create_time datetime update_time orders int id PK varchar order_no int user_id FK decimal total_amount tinyint status varchar receiver_name varchar receiver_phone text receiver_address datetime pay_time varchar transaction_id timestamp created_at timestamp updated_at order_goods int id PK int order_id FK int goods_id FK varchar goods_name varchar goods_image decimal goods_price int quantity timestamp created_at address int id PK int user_id FK varchar receiver_name varchar receiver_phone varchar province varchar city varchar district text detail_address tinyint is_default timestamp created_at timestamp updated_at cart int id PK int user_id FK int goods_id FK int quantity tinyint selected datetime create_time datetime update_time banner int id PK varchar image_url varchar link_url int sort tinyint status datetime create_time datetime update_time page_view int id PK int user_id FK varchar page datetime create_time 下单 收货地址 购物车 访问记录 商品分类 加入购物车 订单商品 包含商品
3. 数据表详细结构
3.1 管理员用户表 (admin_user)
表用途: 存储后台管理系统的管理员账号信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int(11) | 是 | AUTO_INCREMENT | 主键,管理员ID |
username | varchar(50) | 是 | - | 用户名,唯一 |
password | varchar(32) | 是 | - | 密码(MD5加密) |
status | tinyint(1) | 是 | 1 | 状态:0禁用,1启用 |
create_time | datetime | 是 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 是 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
唯一索引: username
外键关系: 无
3.2 小程序用户表 (user)
表用途: 存储小程序用户的基本信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int | 是 | AUTO_INCREMENT | 主键,用户ID |
openid | varchar(100) | 是 | - | 微信openid,唯一 |
nickname | varchar(50) | 否 | - | 用户昵称 |
avatar_url | varchar(255) | 否 | - | 头像URL |
create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
唯一索引: openid
外键关系: 无
3.3 商品分类表 (category)
表用途: 存储商品分类信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int | 是 | AUTO_INCREMENT | 主键,分类ID |
name | varchar(50) | 是 | - | 分类名称 |
image_url | varchar(255) | 否 | - | 分类图片URL |
sort | int | 否 | 0 | 排序(数字越大越靠前) |
create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
外键关系: 无
3.4 商品表 (goods)
表用途: 存储商品的详细信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int | 是 | AUTO_INCREMENT | 主键,商品ID |
category_id | int | 是 | - | 分类ID,外键 |
name | varchar(100) | 是 | - | 商品名称 |
price | decimal(10,2) | 是 | - | 商品价格 |
stock | int | 是 | 0 | 库存数量 |
image_url | varchar(255) | 否 | - | 商品主图URL |
detail | text | 否 | - | 商品详情 |
status | tinyint | 否 | 1 | 状态:0下架,1上架 |
is_recommend | tinyint | 否 | 0 | 是否推荐:0不推荐,1推荐 |
create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
外键关系: category_id → category(id)
索引:
- idx_status (status)
- idx_category_status (category_id, status)
3.5 订单表 (orders)
表用途: 存储订单的基本信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int(11) | 是 | AUTO_INCREMENT | 主键,订单ID |
order_no | varchar(50) | 是 | - | 订单号,唯一 |
user_id | int(11) | 是 | - | 用户ID,外键 |
total_amount | decimal(10,2) | 是 | - | 订单总金额 |
status | tinyint(4) | 是 | 0 | 订单状态:0待支付,1已支付,2已发货,3已完成 |
receiver_name | varchar(50) | 是 | - | 收货人姓名 |
receiver_phone | varchar(20) | 是 | - | 收货人电话 |
receiver_address | text | 是 | - | 收货地址 |
pay_time | datetime | 否 | NULL | 支付时间 |
transaction_id | varchar(100) | 否 | NULL | 支付交易号 |
created_at | timestamp | 是 | CURRENT_TIMESTAMP | 创建时间 |
updated_at | timestamp | 是 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
唯一索引: order_no
外键关系: user_id → user(id)
索引:
- idx_user_id (user_id)
- idx_create_time (created_at)
- idx_status (status)
- idx_create_status (created_at, status)
3.6 订单商品表 (order_goods)
表用途: 存储订单中包含的商品明细信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int(11) | 是 | AUTO_INCREMENT | 主键,订单商品ID |
order_id | int(11) | 是 | - | 订单ID,外键 |
goods_id | int(11) | 是 | - | 商品ID,外键 |
goods_name | varchar(100) | 是 | - | 商品名称(冗余存储) |
goods_image | varchar(255) | 是 | - | 商品图片(冗余存储) |
goods_price | decimal(10,2) | 是 | - | 购买时价格 |
quantity | int(11) | 是 | - | 购买数量 |
created_at | timestamp | 是 | CURRENT_TIMESTAMP | 创建时间 |
主键: id
外键关系:
- order_id → orders(id)
- goods_id → goods(id)
索引:
- idx_order_id (order_id)
- idx_goods_id (goods_id)
- idx_price_quantity (goods_price, quantity)
3.7 收货地址表 (address)
表用途: 存储用户的收货地址信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int(11) | 是 | AUTO_INCREMENT | 主键,地址ID |
user_id | int(11) | 是 | - | 用户ID,外键 |
receiver_name | varchar(50) | 是 | - | 收货人姓名 |
receiver_phone | varchar(20) | 是 | - | 收货人电话 |
province | varchar(50) | 是 | - | 省份 |
city | varchar(50) | 是 | - | 城市 |
district | varchar(50) | 是 | - | 区县 |
detail_address | text | 是 | - | 详细地址 |
is_default | tinyint(1) | 是 | 0 | 是否默认地址:0否,1是 |
created_at | timestamp | 是 | CURRENT_TIMESTAMP | 创建时间 |
updated_at | timestamp | 是 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
外键关系: user_id → user(id)
索引: idx_user_id (user_id)
3.8 购物车表 (cart)
表用途: 存储用户购物车中的商品信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int | 是 | AUTO_INCREMENT | 主键,购物车ID |
user_id | int | 是 | - | 用户ID,外键 |
goods_id | int | 是 | - | 商品ID,外键 |
quantity | int | 是 | 1 | 商品数量 |
selected | tinyint | 否 | 1 | 是否选中:0未选中,1选中 |
create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
外键关系:
- user_id → user(id)
- goods_id → goods(id)
3.9 轮播图表 (banner)
表用途: 存储首页轮播图信息
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int | 是 | AUTO_INCREMENT | 主键,轮播图ID |
image_url | varchar(255) | 是 | - | 图片URL |
link_url | varchar(255) | 否 | - | 跳转链接 |
sort | int | 否 | 0 | 排序(数字越大越靠前) |
status | tinyint | 否 | 1 | 状态:0禁用,1启用 |
create_time | datetime | 否 | CURRENT_TIMESTAMP | 创建时间 |
update_time | datetime | 否 | CURRENT_TIMESTAMP | 更新时间 |
主键: id
外键关系: 无
3.10 页面访问记录表 (page_view)
表用途: 记录用户的页面访问行为,用于数据统计分析
字段名 | 数据类型 | 是否必填 | 默认值 | 注释 |
---|---|---|---|---|
id | int(11) | 是 | AUTO_INCREMENT | 主键,记录ID |
user_id | int(11) | 是 | - | 用户ID,外键 |
page | varchar(100) | 是 | - | 页面路径 |
create_time | datetime | 是 | CURRENT_TIMESTAMP | 访问时间 |
主键: id
外键关系: user_id → user(id)
索引: idx_user_time (user_id, create_time)
4. 数据库设计说明
4.1 设计原则
- 数据一致性:使用外键约束确保数据的引用完整性
- 性能优化:在常用查询字段上建立索引
- 数据冗余:在订单商品表中冗余存储商品信息,避免历史数据丢失
- 扩展性:预留字段便于后续功能扩展
4.2 核心业务流程
- 用户注册流程:通过微信授权获取openid,创建用户记录
- 商品浏览流程:分类 → 商品列表 → 商品详情
- 购物流程:加入购物车 → 选择商品 → 创建订单 → 支付
- 订单流程:待支付 → 已支付 → 已发货 → 已完成
4.3 数据安全
- 密码加密:管理员密码使用MD5加密存储
- 用户隐私:用户信息通过微信授权获取,不存储敏感信息
- 数据备份:建议定期备份重要业务数据
4.4 性能优化建议
- 索引优化:在查询频繁的字段上建立合适的索引
- 分页查询:对于大数据量的列表查询使用分页
- 缓存策略:对于热点数据可考虑使用Redis缓存
- 读写分离:高并发场景下可考虑主从数据库架构
5. 初始化数据
5.1 管理员账号
- 用户名:admin
- 密码:admin(MD5:21232f297a57a5a743894a0e4a801fc3)
5.2 建议初始化的基础数据
- 商品分类:电子产品、服装鞋帽、食品饮料、家居用品等
- 轮播图:首页展示图片
- 推荐商品:设置部分商品为推荐状态