LLM-test/test/sql/2-sql测试-1/mock/README.md

235 lines
6.3 KiB
Markdown
Raw Permalink Normal View History

# SQL Mock 数据生成器
一个使用 Mockjs 为 SQL 表生成随机模拟数据的 Node.js 项目,专为 `minimax-2.1-api.sql` 文件中的15个电商相关表设计。
## 功能特性
- 为15个关联表生成合理的模拟数据
- 自动处理外键依赖关系
- 支持干运行模式(仅生成不插入)
- 可配置数据量大小
- 可导出生成数据到JSON文件
- 详细的统计信息
## 数据库表
项目支持以下15个表的数据生成
1. **Users** - 用户表
2. **Categories** - 分类表(自关联)
3. **Products** - 产品表
4. **ProductCategories** - 产品-分类关联表(多对多)
5. **Orders** - 订单表
6. **OrderItems** - 订单详情表
7. **Addresses** - 地址表
8. **Reviews** - 评论表
9. **CartItems** - 购物车表
10. **ProductViews** - 产品浏览历史表
11. **Coupons** - 优惠券表
12. **UserCoupons** - 用户优惠券关联表
13. **Wishlists** - 产品收藏表
14. **Payments** - 支付记录表
15. **Admins** - 管理员表
## 安装
```bash
# 安装依赖
npm install
# 或者使用 yarn
yarn install
```
## 配置
编辑 `config/database.js` 文件,填写您的 MySQL 连接信息:
```javascript
const config = {
development: {
host: 'localhost', // MySQL主机地址
port: 3306, // 端口
user: 'root', // 用户名
password: 'password', // 密码
database: 'TestECommerceDB', // 数据库名
connectionLimit: 10,
waitForConnections: true,
charset: 'utf8mb4'
}
};
```
**注意**:项目初始配置为空,需要您手动填写。
## 使用方法
### 1. 生成数据并插入数据库
```bash
npm start
# 或
node src/index.js
```
### 2. 干运行模式(仅生成数据,不插入)
```bash
npm run generate
# 或
node src/index.js --dry-run
```
### 3. 生成数据并保存到JSON文件
```bash
node src/index.js --output ./data/generated/mock-data.json
```
### 4. 调整数据量大小
```bash
# 使用乘数因子增加数据量默认1倍
node src/index.js --count-factor 2 # 生成2倍数据
```
### 5. 清空表数据(慎用)
```bash
node src/index.js --truncate
```
### 6. 查看详细日志
```bash
node src/index.js --verbose
```
## 命令行选项
| 选项 | 缩写 | 描述 |
|------|------|------|
| `--dry-run` | `-d` | 仅生成数据,不插入数据库 |
| `--output <file>` | `-o` | 输出生成数据到JSON文件 |
| `--count-factor <number>` | `-c` | 数据量乘数因子默认1 |
| `--truncate` | `-t` | 清空表数据(慎用) |
| `--verbose` | `-v` | 显示详细日志 |
| `--version` | `-V` | 显示版本信息 |
| `--help` | `-h` | 显示帮助信息 |
## 项目结构
```
mock/
├── package.json # 项目依赖配置
├── README.md # 项目说明文档
├── config/
│ ├── database.js # 数据库配置
│ └── mock-rules.js # Mock数据规则配置
├── src/
│ ├── index.js # 主入口文件
│ ├── database/
│ │ ├── connection.js # 数据库连接管理
│ │ ├── schema-parser.js # SQL文件解析器占位符
│ │ └── seed-orders.js # 数据插入顺序管理
│ ├── mock-generators/
│ │ ├── index.js # Mock生成器入口
│ │ ├── base-generator.js # 基础生成器类
│ │ ├── users.js # 用户数据生成器
│ │ ├── categories.js # 分类数据生成器
│ │ ├── products.js # 产品数据生成器
│ │ ├── addresses.js # 地址数据生成器
│ │ └── ...其他生成器(待实现)
│ └── utils/
│ ├── helpers.js # 辅助函数
│ ├── validators.js # 数据验证器(占位符)
│ └── logger.js # 日志记录器(占位符)
├── data/
│ ├── generated/ # 生成的Mock数据备份
│ └── sql/
│ └── minimax-2.1-api.sql # 原始SQL文件
└── scripts/
├── init-database.js # 初始化数据库脚本(占位符)
└── seed-data.js # 插入数据脚本(占位符)
```
## 数据插入顺序
基于外键依赖关系,数据插入按照以下顺序进行:
**第一轮:无依赖或自依赖的表**
1. Categories先顶级分类后子分类
2. Users
3. Admins
4. Coupons
**第二轮:依赖第一轮表的表**
5. Products依赖Categories
6. Addresses依赖Users
7. ProductCategories依赖Products和Categories
8. CartItems、Wishlists、ProductViews依赖Users和Products
**第三轮:依赖第二轮表的表**
9. Orders依赖Users、Addresses
10. OrderItems依赖Orders、Products
11. Reviews依赖Users、Products、Orders
12. Payments依赖Orders
13. UserCoupons依赖Users、Coupons、Orders
## 扩展项目
### 添加新的Mock生成器
1.`src/mock-generators/` 目录下创建新的生成器类
2. 继承 `BaseGenerator`
3. 实现 `generateField` 方法
4.`src/mock-generators/index.js` 中导出新生成器
5.`src/database/seed-orders.js` 中添加种子配置
### 示例生成器结构
```javascript
const BaseGenerator = require('./base-generator');
class NewTableGenerator extends BaseGenerator {
constructor() {
super('NewTable', {
// 字段定义
});
}
generateField(fieldName, definition, index) {
// 字段生成逻辑
}
}
```
## 注意事项
1. **MySQL地址留空**:初始配置为空,需要手动填写
2. **外键依赖**:项目自动处理外键关系,但需要正确配置依赖
3. **数据合理性**:生成器已考虑业务逻辑,但可能需要根据实际需求调整
4. **性能**:大数据量插入时建议分批进行
## 故障排除
### 数据库连接失败
- 检查 `config/database.js` 配置是否正确
- 确保MySQL服务正在运行
- 验证用户名和密码
### 外键约束错误
- 检查 `seed-orders.js` 中的依赖配置
- 确保父表数据已正确生成和插入
### 数据生成不合理
- 调整 `config/mock-rules.js` 中的规则
- 修改生成器类中的字段生成逻辑
## 许可证
MIT
## 贡献
欢迎提交 Issue 和 Pull Request 来改进本项目。