# 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 ` | `-o` | 输出生成数据到JSON文件 | | `--count-factor ` | `-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 来改进本项目。