1296 lines
37 KiB
Markdown
1296 lines
37 KiB
Markdown
# 商品寄卖服务模块 - 数据库设计说明
|
||
|
||
> **项目名称**: 商品寄卖服务模块
|
||
> **数据库类型**: MySQL 5.7
|
||
> **字符集**: utf8mb4
|
||
> **存储引擎**: InnoDB
|
||
> **文档版本**: V1.0
|
||
> **创建日期**: 2024年12月
|
||
|
||
---
|
||
|
||
## 目录
|
||
|
||
1. [数据库概述](#一数据库概述)
|
||
2. [数据表分类](#二数据表分类)
|
||
3. [核心业务表设计](#三核心业务表设计)
|
||
4. [用户相关表设计](#四用户相关表设计)
|
||
5. [商品相关表设计](#五商品相关表设计)
|
||
6. [订单交易表设计](#六订单交易表设计)
|
||
7. [财务相关表设计](#七财务相关表设计)
|
||
8. [系统配置表设计](#八系统配置表设计)
|
||
9. [表关系图](#九表关系图)
|
||
10. [索引设计建议](#十索引设计建议)
|
||
11. [数据字典](#十一数据字典)
|
||
|
||
---
|
||
|
||
## 一、数据库概述
|
||
|
||
### 1.1 设计原则
|
||
- **规范性**: 遵循第三范式,减少数据冗余
|
||
- **扩展性**: 预留扩展字段,便于后期功能升级
|
||
- **性能**: 合理设计索引,优化查询效率
|
||
- **安全性**: 敏感信息加密存储,权限严格控制
|
||
- **完整性**: 使用外键约束保证数据一致性
|
||
|
||
### 1.2 命名规范
|
||
- **表名**: 统一前缀 `wa_`,使用小写字母和下划线
|
||
- **字段名**: 使用小写字母和下划线,语义清晰
|
||
- **主键**: 统一使用 `id` 作为主键名
|
||
- **时间字段**: 统一使用 `created_at`(创建时间)和 `updated_at`(更新时间)
|
||
|
||
### 1.3 数据表统计
|
||
| 分类 | 表数量 | 说明 |
|
||
|------|--------|------|
|
||
| 用户相关 | 3张 | 用户表、地址表、支付账户表 |
|
||
| 商品相关 | 3张 | 商品表、寄售商品表、商品分类表 |
|
||
| 订单交易 | 1张 | 订单表 |
|
||
| 财务相关 | 5张 | 余额、优惠券、奖金、提现记录表 |
|
||
| 系统配置 | 5张 | 轮播图、设置、短信、上传、选项表 |
|
||
| 权限管理 | 4张 | 管理员、角色、权限规则表 |
|
||
| **总计** | **22张** | - |
|
||
|
||
---
|
||
|
||
## 二、数据表分类
|
||
|
||
### 2.1 核心业务表(7张)
|
||
```
|
||
wa_users # 用户表
|
||
wa_goods # 商品表
|
||
wa_merchandise # 寄售商品表
|
||
wa_order # 订单表
|
||
wa_category # 商品分类表
|
||
wa_address # 收货地址表
|
||
wa_banner # 轮播图表
|
||
```
|
||
|
||
### 2.2 财务相关表(5张)
|
||
```
|
||
wa_money_log # 余额变动表
|
||
wa_coupon_log # 优惠券变动表
|
||
wa_selfbonus_log # 个人奖金变动表
|
||
wa_sharebonus_log # 推广奖金变动表
|
||
wa_withdraw # 提现表
|
||
```
|
||
|
||
### 2.3 支付相关表(2张)
|
||
```
|
||
wa_alipay # 用户支付宝表
|
||
wa_bank # 用户银行卡表
|
||
```
|
||
|
||
### 2.4 系统管理表(8张)
|
||
```
|
||
wa_admins # 管理员表
|
||
wa_admin_roles # 管理员角色关联表
|
||
wa_roles # 角色表
|
||
wa_rules # 权限规则表
|
||
wa_options # 选项表
|
||
wa_setting # 设置配置表
|
||
wa_sms # 短信验证码表
|
||
wa_uploads # 附件上传表
|
||
```
|
||
|
||
---
|
||
|
||
## 三、核心业务表设计
|
||
|
||
### 3.1 用户表 (wa_users)
|
||
|
||
**表说明**: 存储用户基本信息、财务信息、邀请关系等核心数据
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| pid | int | 11 | 是 | 0 | 父级用户ID(推荐人) |
|
||
| username | varchar | 32 | 否 | - | 用户名 |
|
||
| nickname | varchar | 40 | 否 | - | 昵称 |
|
||
| mobile | varchar | 16 | 是 | - | 手机号 |
|
||
| password | varchar | 255 | 是 | - | 密码(加密) |
|
||
| salt | varchar | 128 | 是 | - | 密码盐 |
|
||
| sex | enum | - | 否 | 1 | 性别: 0=女, 1=男 |
|
||
| avatar | varchar | 255 | 是 | - | 头像URL |
|
||
| invite | varchar | 11 | 是 | - | 邀请码 |
|
||
| level | tinyint | 4 | 否 | 1 | 用户等级 |
|
||
| birthday | date | - | 是 | - | 生日 |
|
||
| money | decimal | 13,3 | 否 | 0.000 | 余额(元) |
|
||
| coupon | decimal | 13,3 | 否 | 0.000 | 优惠券余额 |
|
||
| self_bonus | decimal | 13,3 | 否 | 0.000 | 我的奖金 |
|
||
| share_bonus | decimal | 13,3 | 否 | 0.000 | 推广奖金 |
|
||
| score | int | 11 | 否 | 0 | 积分 |
|
||
| last_time | datetime | - | 是 | - | 最后登录时间 |
|
||
| last_ip | varchar | 50 | 是 | - | 最后登录IP |
|
||
| join_time | datetime | - | 是 | - | 注册时间 |
|
||
| join_ip | varchar | 50 | 是 | - | 注册IP |
|
||
| token | varchar | 50 | 是 | - | 登录Token |
|
||
| status | tinyint | 4 | 否 | 1 | 状态: 0=禁用, 1=启用 |
|
||
| is_vip | tinyint | 1 | 是 | 0 | 是否VIP: 0=否, 1=是 |
|
||
| viptime | datetime | - | 是 | - | VIP截止时间 |
|
||
| contract | varchar | 255 | 是 | '' | 合同文件 |
|
||
| max_order | int | 10 | 否 | 0 | 最高可抢单数 |
|
||
| is_resell | tinyint | 1 | 是 | 1 | 是否可转拍: 0=否, 1=是 |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- `pid`: 记录推荐人关系,用于推广奖励计算
|
||
- `invite`: 用户专属邀请码,用于邀请新用户
|
||
- `money/coupon/self_bonus/share_bonus`: 四种财务账户,独立管理
|
||
- `is_vip`: VIP用户可享受提前抢购等特权
|
||
- `max_order`: 限制用户最大可抢购订单数量
|
||
- `is_resell`: 控制用户是否可以进行商品转拍
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `mobile` (`mobile`)
|
||
UNIQUE KEY `invite` (`invite`)
|
||
INDEX `idx_pid` (`pid`)
|
||
INDEX `idx_status` (`status`)
|
||
```
|
||
|
||
---
|
||
|
||
### 3.2 商品表 (wa_goods)
|
||
|
||
**表说明**: 存储平台自营商品信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| goods_category_id | int | 11 | 是 | - | 商品分类ID |
|
||
| images | varchar | 1500 | 否 | - | 商品图片(JSON数组) |
|
||
| title | varchar | 255 | 否 | - | 商品标题 |
|
||
| price | decimal | 10,2 | 否 | 0.00 | 售价 |
|
||
| line_price | decimal | 10,2 | 否 | 0.00 | 原价(划线价) |
|
||
| stock_num | int | 11 | 否 | 0 | 库存数量 |
|
||
| sales_volume | int | 11 | 是 | 0 | 显示销量 |
|
||
| content | text | - | 是 | - | 商品详情(富文本) |
|
||
| notes | text | - | 是 | - | 购买须知 |
|
||
| status | tinyint | 1 | 否 | 1 | 状态: 0=下架, 1=上架 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- `images`: 存储JSON格式的图片URL数组,如: `["url1","url2"]`
|
||
- `line_price`: 原价用于显示折扣,增强营销效果
|
||
- `sales_volume`: 虚拟销量,可手动设置
|
||
- `content`: 富文本商品详情,支持HTML格式
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_category` (`goods_category_id`)
|
||
INDEX `idx_status` (`status`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 寄售商品表 (wa_merchandise)
|
||
|
||
**表说明**: 存储用户寄售的二手商品信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| old_id | int | 11 | 是 | 0 | 从订单转拍过来的原订单ID |
|
||
| user_id | int | 11 | 否 | - | 卖家用户ID |
|
||
| title | varchar | 255 | 是 | '' | 商品标题 |
|
||
| image | varchar | 1500 | 是 | '' | 商品图片 |
|
||
| price | decimal | 10,2 | 否 | 0.00 | 寄售价格 |
|
||
| is_show | tinyint | 1 | 是 | 1 | 是否显示: 0=隐藏, 1=显示 |
|
||
| status | tinyint | 1 | 否 | 1 | 状态: 0=已售, 1=未售 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- `old_id`: 支持从已购订单转拍,记录原订单ID,实现二次流转
|
||
- `user_id`: 卖家ID,关联到用户表
|
||
- `is_show`: 管理员审核通过后设为1,才在前台显示
|
||
- `status`: 售出后自动更新为0
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_id` (`user_id`)
|
||
INDEX `idx_status` (`status`, `is_show`)
|
||
INDEX `idx_old_id` (`old_id`)
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 订单表 (wa_order)
|
||
|
||
**表说明**: 存储所有交易订单信息(包括商品订单和寄售商品订单)
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| old_id | int | 11 | 是 | - | 从订单转拍过来的原订单ID |
|
||
| seller_id | int | 11 | 否 | - | 卖家ID(平台或用户) |
|
||
| buyer_id | int | 11 | 是 | 0 | 买家ID |
|
||
| order_sn | varchar | 255 | 是 | - | 订单编号 |
|
||
| total_money | decimal | 10,2 | 是 | 0.00 | 支付金额 |
|
||
| pay_time | datetime | - | 是 | - | 支付时间 |
|
||
| pay_img | varchar | 255 | 是 | - | 支付凭证图片 |
|
||
| status | tinyint | 1 | 否 | 0 | 订单状态: 0=待付款, 1=已支付, 2=已完成 |
|
||
| is_resell | tinyint | 1 | 是 | 0 | 是否转拍: 0=否, 1=是 |
|
||
| is_show | tinyint | 1 | 是 | 1 | 是否显示: 0=隐藏, 1=显示 |
|
||
| is_cancel | tinyint | 1 | 是 | 0 | 是否取消: 0=否, 1=是 |
|
||
| consignee | char | 50 | 是 | - | 收货人 |
|
||
| phone | char | 50 | 是 | - | 收货电话 |
|
||
| province | char | 50 | 是 | - | 省份 |
|
||
| city | char | 50 | 是 | - | 城市 |
|
||
| area | char | 50 | 是 | - | 区县 |
|
||
| address | varchar | 255 | 是 | - | 详细地址 |
|
||
| merchandise_id | int | 11 | 是 | 0 | 寄售商品ID(如果是寄售商品订单) |
|
||
| confirm_time | datetime | - | 是 | - | 确认收货时间 |
|
||
| buy_time | datetime | - | 是 | - | 下单抢购时间 |
|
||
| buy_ip | varchar | 50 | 是 | - | 下单IP |
|
||
| cancel_ip | varchar | 50 | 是 | - | 取消订单IP |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**订单状态说明**:
|
||
| 状态值 | 状态名称 | 说明 | 可执行操作 |
|
||
|--------|----------|------|-----------|
|
||
| 0 | 待付款 | 订单已创建,等待支付 | 支付、取消 |
|
||
| 1 | 已支付 | 买家已支付,等待卖家发货 | 申请退款 |
|
||
| 2 | 已完成 | 交易完成,确认收货 | 评价、申请售后 |
|
||
|
||
**业务逻辑**:
|
||
- `order_sn`: 唯一订单号,格式建议:年月日+时分秒+随机数
|
||
- `seller_id`: 0表示平台自营,>0表示用户寄售
|
||
- `merchandise_id`: >0表示这是一个寄售商品订单
|
||
- `is_resell`: 标记该订单是否已转拍
|
||
- `pay_img`: 如果采用线下支付,上传支付凭证
|
||
- 收货地址字段冗余存储,防止用户修改地址后历史订单地址变更
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `order_sn` (`order_sn`)
|
||
INDEX `idx_seller_buyer` (`seller_id`, `buyer_id`)
|
||
INDEX `idx_status` (`status`)
|
||
INDEX `idx_merchandise` (`merchandise_id`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
## 四、用户相关表设计
|
||
|
||
### 4.1 收货地址表 (wa_address)
|
||
|
||
**表说明**: 存储用户收货地址信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| user_id | int | 11 | 是 | - | 用户ID |
|
||
| consignee | varchar | 255 | 是 | '' | 收货人姓名 |
|
||
| phone | char | 50 | 是 | - | 手机号 |
|
||
| province | varchar | 255 | 是 | '' | 省份 |
|
||
| city | varchar | 255 | 是 | '' | 城市 |
|
||
| area | varchar | 255 | 是 | '' | 区县 |
|
||
| address | varchar | 255 | 是 | '' | 详细地址 |
|
||
| is_default | tinyint | 1 | 否 | - | 是否默认地址: 0=否, 1=是 |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 每个用户可以有多个收货地址
|
||
- `is_default=1` 的地址在下单时自动选中
|
||
- 设置新默认地址时,需要将该用户其他地址的`is_default`设为0
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_id` (`user_id`)
|
||
INDEX `idx_default` (`user_id`, `is_default`)
|
||
```
|
||
|
||
---
|
||
|
||
### 4.2 用户支付宝表 (wa_alipay)
|
||
|
||
**表说明**: 存储用户支付宝收款账户信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| user_id | int | 11 | 是 | - | 用户ID |
|
||
| username | varchar | 255 | 是 | '' | 真实姓名 |
|
||
| account | varchar | 255 | 是 | '' | 支付宝账号 |
|
||
| qrcode | varchar | 255 | 是 | '' | 收款码图片URL |
|
||
| phone | char | 50 | 是 | - | 手机号 |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 用于提现时选择支付宝收款方式
|
||
- `qrcode`: 可选,用户上传收款二维码
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_id` (`user_id`)
|
||
```
|
||
|
||
---
|
||
|
||
### 4.3 用户银行卡表 (wa_bank)
|
||
|
||
**表说明**: 存储用户银行卡信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| user_id | int | 11 | 是 | - | 用户ID |
|
||
| username | varchar | 255 | 是 | '' | 持卡人姓名 |
|
||
| bank | varchar | 255 | 是 | '' | 开户行 |
|
||
| account | varchar | 255 | 是 | '' | 银行卡号(加密存储) |
|
||
| phone | char | 50 | 是 | - | 预留手机号 |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 用于提现时选择银行卡收款方式
|
||
- `account`: 银行卡号需要加密存储,保护用户隐私
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_id` (`user_id`)
|
||
```
|
||
|
||
---
|
||
|
||
## 五、商品相关表设计
|
||
|
||
### 5.1 商品分类表 (wa_category)
|
||
|
||
**表说明**: 商品分类管理
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| name | varchar | 255 | 否 | - | 分类名称 |
|
||
| weight | int | 11 | 是 | 0 | 排序权重(数字越大越靠前) |
|
||
| status | tinyint | 4 | 否 | 1 | 状态: 0=隐藏, 1=显示 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- `weight`: 用于前台分类排序展示
|
||
- 当前为一级分类,如需多级分类可增加`pid`字段
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_status_weight` (`status`, `weight`)
|
||
```
|
||
|
||
---
|
||
|
||
### 5.2 轮播图表 (wa_banner)
|
||
|
||
**表说明**: 首页轮播图管理
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| image | varchar | 255 | 否 | - | 图片URL |
|
||
| url | varchar | 255 | 是 | '' | 跳转地址(页面路径或外部链接) |
|
||
| weight | int | 11 | 是 | 0 | 排序权重 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- `url`: 点击轮播图跳转的目标地址
|
||
- `weight`: 控制轮播图显示顺序
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_weight` (`weight`)
|
||
```
|
||
|
||
---
|
||
|
||
## 六、订单交易表设计
|
||
|
||
订单表已在核心业务表中详细说明,此处补充订单关联的业务说明。
|
||
|
||
### 6.1 订单业务流程
|
||
|
||
```
|
||
创建订单 (status=0)
|
||
↓
|
||
支付订单 (status=1, 记录pay_time)
|
||
↓
|
||
卖家发货
|
||
↓
|
||
买家确认收货 (status=2, 记录confirm_time)
|
||
↓
|
||
交易完成
|
||
```
|
||
|
||
### 6.2 订单取消逻辑
|
||
|
||
| 场景 | 操作 | 数据变更 |
|
||
|------|------|----------|
|
||
| 待付款取消 | 买家/系统超时 | is_cancel=1, 记录cancel_ip |
|
||
| 已支付取消 | 需要双方协商或平台介入 | is_cancel=1, 退款处理 |
|
||
|
||
### 6.3 订单转拍逻辑
|
||
|
||
```
|
||
买家购买商品
|
||
↓
|
||
确认收货 (status=2)
|
||
↓
|
||
申请转拍 (is_resell=1)
|
||
↓
|
||
创建寄售商品记录 (wa_merchandise, old_id=订单ID)
|
||
↓
|
||
其他用户购买
|
||
↓
|
||
生成新订单
|
||
```
|
||
|
||
---
|
||
|
||
## 七、财务相关表设计
|
||
|
||
### 7.1 余额变动表 (wa_money_log)
|
||
|
||
**表说明**: 记录用户余额的所有变动记录
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| user_id | int | 10 | 否 | 0 | 用户ID |
|
||
| type | tinyint | 1 | 是 | 1 | 类型: 1=收入, 2=支出 |
|
||
| money | decimal | 13,3 | 否 | 0.000 | 变更金额 |
|
||
| before | decimal | 13,3 | 否 | 0.000 | 变更前余额 |
|
||
| after | decimal | 13,3 | 否 | 0.000 | 变更后余额 |
|
||
| memo | varchar | 255 | 是 | '' | 备注说明 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 每次余额变动都需要记录一条日志
|
||
- `before`和`after`字段用于核对余额计算是否正确
|
||
- `memo`记录变动原因,如:"购买商品"、"充值"、"退款"等
|
||
|
||
**收入场景**:
|
||
- 充值
|
||
- 退款
|
||
- 活动奖励
|
||
|
||
**支出场景**:
|
||
- 购买商品
|
||
- 提现
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_type` (`user_id`, `type`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
### 7.2 优惠券变动表 (wa_coupon_log)
|
||
|
||
**表说明**: 记录用户优惠券的所有变动记录
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| user_id | int | 10 | 否 | 0 | 用户ID |
|
||
| type | tinyint | 1 | 是 | 1 | 类型: 1=收入, 2=支出, 3=提现驳回 |
|
||
| money | decimal | 13,3 | 否 | 0.000 | 变更金额 |
|
||
| before | decimal | 13,3 | 否 | 0.000 | 变更前金额 |
|
||
| after | decimal | 13,3 | 否 | 0.000 | 变更后金额 |
|
||
| memo | varchar | 255 | 是 | '' | 备注说明 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 优惠券是平台发放的虚拟货币,不可提现(根据业务规则可能可以提现)
|
||
- `type=3` 提现驳回,将扣除的金额返还
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_type` (`user_id`, `type`)
|
||
```
|
||
|
||
---
|
||
|
||
### 7.3 个人奖金变动表 (wa_selfbonus_log)
|
||
|
||
**表说明**: 记录用户个人奖金的所有变动记录
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| user_id | int | 10 | 否 | 0 | 用户ID |
|
||
| type | tinyint | 1 | 是 | 1 | 类型: 1=收入, 2=支出 |
|
||
| money | decimal | 13,3 | 否 | 0.000 | 变更金额 |
|
||
| before | decimal | 13,3 | 否 | 0.000 | 变更前金额 |
|
||
| after | decimal | 13,3 | 否 | 0.000 | 变更后金额 |
|
||
| memo | varchar | 255 | 是 | '' | 备注说明 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 个人奖金来源于用户自己的交易奖励
|
||
- 可以提现或转入余额
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_id` (`user_id`)
|
||
```
|
||
|
||
---
|
||
|
||
### 7.4 推广奖金变动表 (wa_sharebonus_log)
|
||
|
||
**表说明**: 记录用户推广奖金的所有变动记录
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| user_id | int | 10 | 否 | 0 | 用户ID |
|
||
| type | tinyint | 1 | 是 | 1 | 类型: 1=收入, 2=支出, 3=提现驳回 |
|
||
| money | decimal | 13,3 | 否 | 0.000 | 变更金额 |
|
||
| before | decimal | 13,3 | 否 | 0.000 | 变更前金额 |
|
||
| after | decimal | 13,3 | 否 | 0.000 | 变更后金额 |
|
||
| memo | varchar | 255 | 是 | '' | 备注说明 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 推广奖金来源于邀请用户的消费返佣
|
||
- 支持提现功能
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_user_type` (`user_id`, `type`)
|
||
```
|
||
|
||
---
|
||
|
||
### 7.5 提现表 (wa_withdraw)
|
||
|
||
**表说明**: 记录用户提现申请和处理结果
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| transfer_no | varchar | 255 | 否 | '' | 提现编号(唯一) |
|
||
| user_id | int | 11 | 否 | 0 | 用户ID |
|
||
| cate | tinyint | 1 | 否 | 0 | 提现类型: 2=优惠券, 4=推广奖金 |
|
||
| account_type | tinyint | 1 | 是 | 1 | 账号类型: 1=银行卡, 2=支付宝 |
|
||
| account_id | int | 11 | 是 | 0 | 收款账号ID(关联银行卡或支付宝表) |
|
||
| account_info | text | - | 是 | - | 收款账号信息(JSON格式) |
|
||
| money | decimal | 13,2 | 否 | 0.00 | 提现金额 |
|
||
| handling_fee | decimal | 13,2 | 否 | 0.00 | 手续费 |
|
||
| actual_amount | decimal | 13,2 | 否 | 0.00 | 实际到账金额 |
|
||
| status | tinyint | 3 | 否 | 0 | 状态: 0=待审核, 1=通过, 2=驳回 |
|
||
| remark | varchar | 255 | 是 | '' | 备注(驳回原因等) |
|
||
| created_at | datetime | - | 否 | - | 申请时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**提现类型说明**:
|
||
| cate | 名称 | 对应字段 |
|
||
|------|------|----------|
|
||
| 2 | 优惠券提现 | wa_users.coupon |
|
||
| 4 | 推广奖金提现 | wa_users.share_bonus |
|
||
|
||
**提现状态流转**:
|
||
```
|
||
用户申请 (status=0)
|
||
↓
|
||
管理员审核
|
||
↓
|
||
通过 (status=1, 扣除相应账户余额) / 驳回 (status=2, 返还金额)
|
||
```
|
||
|
||
**业务逻辑**:
|
||
- `transfer_no`: 唯一提现流水号
|
||
- `account_info`: 冗余存储收款账号信息,防止用户修改账号后历史记录丢失
|
||
- `actual_amount = money - handling_fee`
|
||
- 驳回时需要返还扣除的金额,并记录到对应的变动表(type=3)
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `transfer_no` (`transfer_no`)
|
||
INDEX `idx_user_status` (`user_id`, `status`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
## 八、系统配置表设计
|
||
|
||
### 8.1 管理员表 (wa_admins)
|
||
|
||
**表说明**: 后台管理员账号信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| username | varchar | 32 | 否 | - | 登录账号 |
|
||
| nickname | varchar | 40 | 否 | - | 昵称 |
|
||
| password | varchar | 255 | 否 | - | 密码(加密) |
|
||
| avatar | varchar | 255 | 是 | /app/admin/avatar.png | 头像 |
|
||
| email | varchar | 100 | 是 | - | 邮箱 |
|
||
| mobile | varchar | 16 | 是 | - | 手机号 |
|
||
| qrcode | varchar | 255 | 是 | '' | 二维码 |
|
||
| login_at | datetime | - | 是 | - | 最后登录时间 |
|
||
| status | tinyint | 4 | 是 | - | 状态: 0=禁用, 1=启用 |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `username` (`username`)
|
||
INDEX `idx_status` (`status`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.2 角色表 (wa_roles)
|
||
|
||
**表说明**: 管理员角色配置
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| name | varchar | 80 | 否 | - | 角色名称 |
|
||
| rules | text | - | 是 | - | 权限规则ID集合(JSON数组) |
|
||
| pid | int | 10 | 是 | - | 父级角色ID |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.3 管理员角色关联表 (wa_admin_roles)
|
||
|
||
**表说明**: 管理员与角色的多对多关系
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| role_id | int | 11 | 否 | - | 角色ID |
|
||
| admin_id | int | 11 | 否 | - | 管理员ID |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_admin_role` (`admin_id`, `role_id`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.4 权限规则表 (wa_rules)
|
||
|
||
**表说明**: 后台权限菜单和功能规则
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| title | varchar | 255 | 否 | - | 菜单标题 |
|
||
| icon | varchar | 255 | 是 | - | 图标 |
|
||
| key | varchar | 255 | 否 | - | 权限标识(唯一) |
|
||
| pid | int | 10 | 是 | 0 | 父级菜单ID |
|
||
| href | varchar | 255 | 是 | - | 链接地址 |
|
||
| type | int | 11 | 否 | 1 | 类型: 1=菜单, 2=按钮 |
|
||
| weight | int | 11 | 是 | 0 | 排序权重 |
|
||
| created_at | datetime | - | 否 | - | 创建时间 |
|
||
| updated_at | datetime | - | 否 | - | 更新时间 |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `key` (`key`)
|
||
INDEX `idx_pid` (`pid`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.5 短信验证码表 (wa_sms)
|
||
|
||
**表说明**: 存储发送的短信验证码记录
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| mobile | varchar | 16 | 否 | - | 手机号 |
|
||
| event | varchar | 16 | 否 | - | 事件名(register/login/forget等) |
|
||
| code | varchar | 10 | 否 | - | 验证码 |
|
||
| times | int | 11 | 是 | 0 | 已验证次数 |
|
||
| ip | varchar | 50 | 否 | - | 发送IP |
|
||
| created_at | datetime | - | 是 | - | 创建时间 |
|
||
| updated_at | datetime | - | 是 | - | 更新时间 |
|
||
|
||
**业务逻辑**:
|
||
- 验证码有效期通常为5-10分钟,通过`created_at`判断
|
||
- `times`记录验证失败次数,超过限制(如3次)则失效
|
||
- 同一手机号、同一事件类型,1分钟内只能发送一次
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_mobile_event` (`mobile`, `event`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.6 附件上传表 (wa_uploads)
|
||
|
||
**表说明**: 记录所有上传的文件信息
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 11 | 否 | - | 主键ID |
|
||
| name | varchar | 128 | 否 | - | 文件名称 |
|
||
| url | varchar | 255 | 否 | - | 文件URL |
|
||
| admin_id | int | 11 | 是 | - | 上传管理员ID |
|
||
| file_size | int | 11 | 否 | - | 文件大小(字节) |
|
||
| mime_type | varchar | 255 | 否 | - | MIME类型 |
|
||
| image_width | int | 11 | 是 | - | 图片宽度(如果是图片) |
|
||
| image_height | int | 11 | 是 | - | 图片高度(如果是图片) |
|
||
| ext | varchar | 128 | 否 | - | 文件扩展名 |
|
||
| storage | varchar | 255 | 否 | local | 存储位置: local/oss/qiniu等 |
|
||
| category | varchar | 128 | 是 | - | 文件分类 |
|
||
| created_at | date | - | 是 | - | 上传时间 |
|
||
| updated_at | date | - | 是 | - | 更新时间 |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_admin_id` (`admin_id`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.7 选项表 (wa_options)
|
||
|
||
**表说明**: 存储系统配置的键值对
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| name | varchar | 255 | 否 | - | 配置键名 |
|
||
| value | longtext | - | 否 | - | 配置值 |
|
||
| created_at | datetime | - | 否 | 2022-08-15 00:00:00 | 创建时间 |
|
||
| updated_at | datetime | - | 否 | 2022-08-15 00:00:00 | 更新时间 |
|
||
|
||
**使用示例**:
|
||
```json
|
||
{
|
||
"name": "site_name",
|
||
"value": "寄卖商城"
|
||
}
|
||
```
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
UNIQUE KEY `name` (`name`)
|
||
```
|
||
|
||
---
|
||
|
||
### 8.8 设置配置表 (wa_setting)
|
||
|
||
**表说明**: 系统设置的结构化存储
|
||
|
||
**表结构**:
|
||
| 字段名 | 类型 | 长度 | 允许NULL | 默认值 | 说明 |
|
||
|--------|------|------|----------|--------|------|
|
||
| id | int | 10 | 否 | - | 主键ID |
|
||
| name | varchar | 30 | 是 | '' | 变量名 |
|
||
| group | varchar | 30 | 是 | '' | 分组名 |
|
||
| title | varchar | 100 | 是 | '' | 变量标题 |
|
||
| tip | varchar | 100 | 是 | '' | 变量描述 |
|
||
| value | text | - | 是 | - | 变量值 |
|
||
|
||
**索引建议**:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
INDEX `idx_group` (`group`)
|
||
```
|
||
|
||
---
|
||
|
||
## 九、表关系图
|
||
|
||
### 9.1 核心业务表关系
|
||
|
||
```
|
||
┌─────────────┐ ┌──────────────┐ ┌─────────────┐
|
||
│ wa_users │────1:N──│ wa_address │ │ wa_category │
|
||
│ (用户表) │ │ (地址表) │ │ (商品分类) │
|
||
└─────────────┘ └──────────────┘ └─────────────┘
|
||
│ │
|
||
│ 1:N 1:N
|
||
│ │
|
||
↓ ↓
|
||
┌─────────────┐ ┌─────────────┐
|
||
│wa_merchandise│ │ wa_goods │
|
||
│ (寄售商品) │ │ (商品表) │
|
||
└─────────────┘ └─────────────┘
|
||
│ │
|
||
│ 1:N 1:N
|
||
│ │
|
||
└──────────────┬──────────────────────────────────┘
|
||
↓
|
||
┌──────────────┐
|
||
│ wa_order │
|
||
│ (订单表) │
|
||
└──────────────┘
|
||
```
|
||
|
||
### 9.2 财务表关系
|
||
|
||
```
|
||
┌─────────────┐
|
||
│ wa_users │
|
||
│ (用户表) │
|
||
│ - money │──────1:N────→ wa_money_log (余额变动)
|
||
│ - coupon │──────1:N────→ wa_coupon_log (优惠券变动)
|
||
│ - self_bonus│─────1:N────→ wa_selfbonus_log (个人奖金变动)
|
||
│ - share_bonus│────1:N────→ wa_sharebonus_log (推广奖金变动)
|
||
└─────────────┘
|
||
│
|
||
│ 1:N
|
||
↓
|
||
┌──────────────┐
|
||
│ wa_withdraw │
|
||
│ (提现表) │
|
||
└──────────────┘
|
||
│
|
||
├──────→ wa_bank (银行卡)
|
||
└──────→ wa_alipay (支付宝)
|
||
```
|
||
|
||
### 9.3 权限管理表关系
|
||
|
||
```
|
||
┌─────────────┐
|
||
│ wa_admins │
|
||
│ (管理员) │
|
||
└─────────────┘
|
||
│
|
||
│ N:M (through wa_admin_roles)
|
||
↓
|
||
┌─────────────┐ ┌──────────────┐
|
||
│ wa_roles │────1:N──│ wa_rules │
|
||
│ (角色表) │ │ (权限规则) │
|
||
└─────────────┘ └──────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 十、索引设计建议
|
||
|
||
### 10.1 主键索引
|
||
所有表都应该有主键索引:
|
||
```sql
|
||
PRIMARY KEY (`id`)
|
||
```
|
||
|
||
### 10.2 唯一索引
|
||
对于需要保证唯一性的字段:
|
||
```sql
|
||
-- 用户表
|
||
UNIQUE KEY `mobile` (`mobile`)
|
||
UNIQUE KEY `invite` (`invite`)
|
||
|
||
-- 订单表
|
||
UNIQUE KEY `order_sn` (`order_sn`)
|
||
|
||
-- 提现表
|
||
UNIQUE KEY `transfer_no` (`transfer_no`)
|
||
|
||
-- 管理员表
|
||
UNIQUE KEY `username` (`username`)
|
||
```
|
||
|
||
### 10.3 普通索引
|
||
常用查询字段添加索引:
|
||
|
||
**用户相关**:
|
||
```sql
|
||
-- wa_users
|
||
INDEX `idx_pid` (`pid`)
|
||
INDEX `idx_status` (`status`)
|
||
INDEX `idx_mobile` (`mobile`)
|
||
INDEX `idx_invite` (`invite`)
|
||
|
||
-- wa_address
|
||
INDEX `idx_user_id` (`user_id`)
|
||
INDEX `idx_default` (`user_id`, `is_default`)
|
||
```
|
||
|
||
**商品相关**:
|
||
```sql
|
||
-- wa_goods
|
||
INDEX `idx_category` (`goods_category_id`)
|
||
INDEX `idx_status` (`status`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
|
||
-- wa_merchandise
|
||
INDEX `idx_user_id` (`user_id`)
|
||
INDEX `idx_status` (`status`, `is_show`)
|
||
```
|
||
|
||
**订单相关**:
|
||
```sql
|
||
-- wa_order
|
||
INDEX `idx_seller_buyer` (`seller_id`, `buyer_id`)
|
||
INDEX `idx_status` (`status`)
|
||
INDEX `idx_merchandise` (`merchandise_id`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
```
|
||
|
||
**财务相关**:
|
||
```sql
|
||
-- wa_money_log, wa_coupon_log等
|
||
INDEX `idx_user_type` (`user_id`, `type`)
|
||
INDEX `idx_created_at` (`created_at`)
|
||
|
||
-- wa_withdraw
|
||
INDEX `idx_user_status` (`user_id`, `status`)
|
||
```
|
||
|
||
### 10.4 复合索引说明
|
||
- 复合索引遵循最左前缀原则
|
||
- 查询频率高的字段放在前面
|
||
- 区分度高的字段放在前面
|
||
|
||
---
|
||
|
||
## 十一、数据字典
|
||
|
||
### 11.1 枚举值说明
|
||
|
||
#### 用户状态 (wa_users.status)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 禁用 |
|
||
| 1 | 启用 |
|
||
|
||
#### 性别 (wa_users.sex)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 女 |
|
||
| 1 | 男 |
|
||
|
||
#### 订单状态 (wa_order.status)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 待付款 |
|
||
| 1 | 已支付 |
|
||
| 2 | 已完成 |
|
||
|
||
#### 财务变动类型 (money_log.type等)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 1 | 收入 |
|
||
| 2 | 支出 |
|
||
| 3 | 提现驳回(部分表) |
|
||
|
||
#### 提现类型 (wa_withdraw.cate)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 2 | 优惠券提现 |
|
||
| 4 | 推广奖金提现 |
|
||
|
||
#### 提现账号类型 (wa_withdraw.account_type)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 1 | 银行卡 |
|
||
| 2 | 支付宝 |
|
||
|
||
#### 提现状态 (wa_withdraw.status)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 待审核 |
|
||
| 1 | 通过 |
|
||
| 2 | 驳回 |
|
||
|
||
#### 商品状态 (wa_goods.status)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 下架 |
|
||
| 1 | 上架 |
|
||
|
||
#### 寄售商品状态 (wa_merchandise.status)
|
||
| 值 | 说明 |
|
||
|----|------|
|
||
| 0 | 已售 |
|
||
| 1 | 未售 |
|
||
|
||
---
|
||
|
||
## 十二、数据库优化建议
|
||
|
||
### 12.1 性能优化
|
||
1. **合理使用索引**: 为常用查询字段添加索引,但避免过多索引影响写入性能
|
||
2. **分表策略**:
|
||
- 日志类表(money_log等)按月分表
|
||
- 订单表按年分表
|
||
3. **读写分离**: 主库负责写入,从库负责查询
|
||
4. **缓存策略**:
|
||
- 热点数据缓存到Redis
|
||
- 商品列表、分类等查询缓存
|
||
|
||
### 12.2 安全建议
|
||
1. **敏感信息加密**:
|
||
- 密码使用bcrypt加密
|
||
- 银行卡号使用AES加密
|
||
2. **SQL注入防护**: 使用参数化查询
|
||
3. **数据备份**:
|
||
- 每天全量备份
|
||
- 每小时增量备份
|
||
|
||
### 12.3 扩展性建议
|
||
1. **预留字段**: 每个表预留1-2个扩展字段
|
||
2. **软删除**: 重要数据不要物理删除,使用软删除(添加deleted_at字段)
|
||
3. **版本控制**: 数据库表结构变更使用migration工具管理
|
||
|
||
---
|
||
|
||
## 十三、数据初始化脚本
|
||
|
||
### 13.1 创建数据库
|
||
```sql
|
||
CREATE DATABASE IF NOT EXISTS `uniapp_mall`
|
||
DEFAULT CHARACTER SET utf8mb4
|
||
DEFAULT COLLATE utf8mb4_unicode_ci;
|
||
|
||
USE `uniapp_mall`;
|
||
```
|
||
|
||
### 13.2 添加主键和索引
|
||
```sql
|
||
-- 用户表
|
||
ALTER TABLE `wa_users`
|
||
ADD PRIMARY KEY (`id`),
|
||
ADD UNIQUE KEY `mobile` (`mobile`),
|
||
ADD UNIQUE KEY `invite` (`invite`),
|
||
ADD KEY `idx_pid` (`pid`),
|
||
ADD KEY `idx_status` (`status`);
|
||
|
||
-- 订单表
|
||
ALTER TABLE `wa_order`
|
||
ADD PRIMARY KEY (`id`),
|
||
ADD UNIQUE KEY `order_sn` (`order_sn`),
|
||
ADD KEY `idx_seller_buyer` (`seller_id`, `buyer_id`),
|
||
ADD KEY `idx_status` (`status`),
|
||
ADD KEY `idx_merchandise` (`merchandise_id`);
|
||
|
||
-- 其他表类似...
|
||
```
|
||
|
||
### 13.3 自增ID设置
|
||
```sql
|
||
ALTER TABLE `wa_users`
|
||
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
|
||
|
||
ALTER TABLE `wa_order`
|
||
MODIFY `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT;
|
||
|
||
-- 其他表类似...
|
||
```
|
||
|
||
---
|
||
|
||
## 十四、常见查询SQL示例
|
||
|
||
### 14.1 用户相关查询
|
||
|
||
**查询用户及其推荐人信息**:
|
||
```sql
|
||
SELECT
|
||
u.id, u.nickname, u.mobile,
|
||
p.nickname AS parent_nickname
|
||
FROM wa_users u
|
||
LEFT JOIN wa_users p ON u.pid = p.id
|
||
WHERE u.id = 123;
|
||
```
|
||
|
||
**查询用户的所有财务账户余额**:
|
||
```sql
|
||
SELECT
|
||
id, nickname,
|
||
money AS 余额,
|
||
coupon AS 优惠券,
|
||
self_bonus AS 个人奖金,
|
||
share_bonus AS 推广奖金
|
||
FROM wa_users
|
||
WHERE id = 123;
|
||
```
|
||
|
||
**查询用户的推广下线列表**:
|
||
```sql
|
||
SELECT id, nickname, mobile, join_time
|
||
FROM wa_users
|
||
WHERE pid = 123
|
||
ORDER BY join_time DESC;
|
||
```
|
||
|
||
---
|
||
|
||
### 14.2 订单相关查询
|
||
|
||
**查询用户的买家订单**:
|
||
```sql
|
||
SELECT o.*, m.title AS goods_title, m.image
|
||
FROM wa_order o
|
||
LEFT JOIN wa_merchandise m ON o.merchandise_id = m.id
|
||
WHERE o.buyer_id = 123
|
||
ORDER BY o.created_at DESC;
|
||
```
|
||
|
||
**查询用户的卖家订单**:
|
||
```sql
|
||
SELECT o.*, u.nickname AS buyer_nickname
|
||
FROM wa_order o
|
||
LEFT JOIN wa_users u ON o.buyer_id = u.id
|
||
WHERE o.seller_id = 123
|
||
ORDER BY o.created_at DESC;
|
||
```
|
||
|
||
**统计订单金额**:
|
||
```sql
|
||
SELECT
|
||
COUNT(*) AS order_count,
|
||
SUM(total_money) AS total_amount,
|
||
status
|
||
FROM wa_order
|
||
WHERE buyer_id = 123
|
||
GROUP BY status;
|
||
```
|
||
|
||
---
|
||
|
||
### 14.3 财务相关查询
|
||
|
||
**查询余额变动明细**:
|
||
```sql
|
||
SELECT *
|
||
FROM wa_money_log
|
||
WHERE user_id = 123
|
||
ORDER BY created_at DESC
|
||
LIMIT 20;
|
||
```
|
||
|
||
**统计用户收支情况**:
|
||
```sql
|
||
SELECT
|
||
type,
|
||
SUM(money) AS total_money,
|
||
COUNT(*) AS count
|
||
FROM wa_money_log
|
||
WHERE user_id = 123
|
||
GROUP BY type;
|
||
```
|
||
|
||
**查询待审核的提现申请**:
|
||
```sql
|
||
SELECT w.*, u.nickname, u.mobile
|
||
FROM wa_withdraw w
|
||
LEFT JOIN wa_users u ON w.user_id = u.id
|
||
WHERE w.status = 0
|
||
ORDER BY w.created_at ASC;
|
||
```
|
||
|
||
---
|
||
|
||
### 14.4 商品相关查询
|
||
|
||
**查询寄售商品列表(含卖家信息)**:
|
||
```sql
|
||
SELECT m.*, u.nickname AS seller_nickname
|
||
FROM wa_merchandise m
|
||
LEFT JOIN wa_users u ON m.user_id = u.id
|
||
WHERE m.status = 1 AND m.is_show = 1
|
||
ORDER BY m.created_at DESC;
|
||
```
|
||
|
||
**查询用户的寄售商品**:
|
||
```sql
|
||
SELECT *
|
||
FROM wa_merchandise
|
||
WHERE user_id = 123
|
||
ORDER BY created_at DESC;
|
||
```
|
||
|
||
---
|
||
|
||
## 十五、数据库变更记录
|
||
|
||
### 15.1 版本历史
|
||
|
||
| 版本号 | 日期 | 变更内容 | 变更人 |
|
||
|--------|------|----------|--------|
|
||
| V1.0 | 2024-12-01 | 初始数据库设计 | 产品团队 |
|
||
| V1.1 | 待定 | 待添加的扩展功能 | - |
|
||
|
||
### 15.2 待优化项
|
||
- [ ] 添加商品评价表
|
||
- [ ] 添加物流信息表
|
||
- [ ] 添加消息通知表
|
||
- [ ] 添加积分商城相关表
|
||
- [ ] 优化财务日志表的分表策略
|
||
|
||
---
|
||
|
||
**文档维护**: 产品团队
|
||
**最后更新**: 2024年12月
|
||
**下次审查**: 2025年1月
|
||
|