123 lines
3.6 KiB
Markdown
123 lines
3.6 KiB
Markdown
|
|
# 数据库建表SQL说明
|
|||
|
|
|
|||
|
|
## 文件说明
|
|||
|
|
|
|||
|
|
- `schema.sql` - 完整的数据库建表SQL脚本
|
|||
|
|
|
|||
|
|
## 表结构说明
|
|||
|
|
|
|||
|
|
### 1. payment_order(支付订单表)
|
|||
|
|
|
|||
|
|
**表说明**:存储支付订单的完整信息
|
|||
|
|
|
|||
|
|
**主要字段**:
|
|||
|
|
- `id` - 主键ID(自增)
|
|||
|
|
- `merchant_transaction_id` - 商户订单号(唯一索引)
|
|||
|
|
- `transaction_id` - PingPong交易流水号
|
|||
|
|
- `amount` - 交易金额(DECIMAL(12,2))
|
|||
|
|
- `currency` - 交易币种(3位ISO 4217代码)
|
|||
|
|
- `payment_type` - 交易类型(SALE/AUTH)
|
|||
|
|
- `status` - 订单状态(PENDING/SUCCESS/FAILED/REVIEW/CANCELLED)
|
|||
|
|
- `token` - PingPong返回的token
|
|||
|
|
- `payment_url` - 支付收银台地址
|
|||
|
|
- `create_time` - 创建时间(自动填充)
|
|||
|
|
- `update_time` - 更新时间(自动更新)
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- 主键:`id`
|
|||
|
|
- 唯一索引:`merchant_transaction_id`
|
|||
|
|
- 普通索引:`transaction_id`、`status`、`create_time`
|
|||
|
|
|
|||
|
|
### 2. payment_record(支付记录表)
|
|||
|
|
|
|||
|
|
**表说明**:记录所有支付相关操作(回调、查询等)
|
|||
|
|
|
|||
|
|
**主要字段**:
|
|||
|
|
- `id` - 主键ID(自增)
|
|||
|
|
- `transaction_id` - PingPong交易流水号
|
|||
|
|
- `merchant_transaction_id` - 商户订单号
|
|||
|
|
- `record_type` - 记录类型(CHECKOUT/CALLBACK/QUERY/REFUND/CAPTURE/VOID)
|
|||
|
|
- `status` - 交易状态
|
|||
|
|
- `code` - 响应码
|
|||
|
|
- `description` - 响应描述
|
|||
|
|
- `request_data` - 原始请求数据(JSON,TEXT类型)
|
|||
|
|
- `response_data` - 原始响应数据(JSON,TEXT类型)
|
|||
|
|
- `create_time` - 创建时间(自动填充)
|
|||
|
|
|
|||
|
|
**索引**:
|
|||
|
|
- 主键:`id`
|
|||
|
|
- 普通索引:`transaction_id`、`merchant_transaction_id`、`record_type`、`create_time`
|
|||
|
|
|
|||
|
|
## 执行方式
|
|||
|
|
|
|||
|
|
### 方式1:直接执行SQL文件
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mysql -u用户名 -p密码 数据库名 < schema.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式2:在MySQL客户端中执行
|
|||
|
|
|
|||
|
|
```sql
|
|||
|
|
-- 1. 连接到MySQL
|
|||
|
|
mysql -u用户名 -p密码
|
|||
|
|
|
|||
|
|
-- 2. 选择数据库
|
|||
|
|
USE mtpay;
|
|||
|
|
|
|||
|
|
-- 3. 执行SQL文件
|
|||
|
|
SOURCE /path/to/schema.sql;
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式3:使用IDE工具
|
|||
|
|
|
|||
|
|
1. 打开数据库管理工具(如Navicat、DBeaver、DataGrip等)
|
|||
|
|
2. 连接到数据库
|
|||
|
|
3. 打开 `schema.sql` 文件
|
|||
|
|
4. 执行SQL脚本
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **字符集**:使用 `utf8mb4` 字符集,支持emoji和特殊字符
|
|||
|
|
2. **排序规则**:使用 `utf8mb4_unicode_ci` 排序规则
|
|||
|
|
3. **存储引擎**:使用 `InnoDB` 存储引擎,支持事务和外键
|
|||
|
|
4. **时间字段**:使用 `DATETIME` 类型,支持自动填充和更新
|
|||
|
|
5. **金额字段**:使用 `DECIMAL(12,2)` 类型,精确到分
|
|||
|
|
6. **唯一约束**:`merchant_transaction_id` 必须全局唯一
|
|||
|
|
|
|||
|
|
## 字段长度说明
|
|||
|
|
|
|||
|
|
- `merchant_transaction_id`:64字符(根据PingPong文档)
|
|||
|
|
- `transaction_id`:64字符(根据PingPong文档)
|
|||
|
|
- `token`:255字符(根据PingPong文档)
|
|||
|
|
- `payment_url`:500字符(URL可能较长)
|
|||
|
|
- `remark`:500字符(备注信息)
|
|||
|
|
- `description`:500字符(响应描述)
|
|||
|
|
- `request_data`/`response_data`:TEXT类型(JSON数据可能很长)
|
|||
|
|
|
|||
|
|
## 索引优化建议
|
|||
|
|
|
|||
|
|
1. **查询优化**:根据实际查询场景添加复合索引
|
|||
|
|
2. **时间范围查询**:`create_time` 索引有助于时间范围查询
|
|||
|
|
3. **状态查询**:`status` 索引有助于按状态筛选订单
|
|||
|
|
4. **关联查询**:`transaction_id` 和 `merchant_transaction_id` 索引有助于关联查询
|
|||
|
|
|
|||
|
|
## 数据备份建议
|
|||
|
|
|
|||
|
|
1. 定期备份数据库
|
|||
|
|
2. 重要操作前先备份
|
|||
|
|
3. 使用 `mysqldump` 命令备份:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
mysqldump -u用户名 -p密码 数据库名 > backup_$(date +%Y%m%d).sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 版本更新
|
|||
|
|
|
|||
|
|
如果后续需要修改表结构,建议:
|
|||
|
|
|
|||
|
|
1. 创建迁移SQL文件(如:`migration_v1.1.sql`)
|
|||
|
|
2. 使用 `ALTER TABLE` 语句修改
|
|||
|
|
3. 记录版本变更日志
|
|||
|
|
|