235 lines
6.3 KiB
Markdown
235 lines
6.3 KiB
Markdown
|
|
# 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 来改进本项目。
|