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