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 来改进本项目。 |