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

6.3 KiB
Raw Permalink Blame 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 - 管理员表

安装

# 安装依赖
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              # 插入数据脚本(占位符)

数据插入顺序

基于外键依赖关系,数据插入按照以下顺序进行:

第一轮:无依赖或自依赖的表

  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 中添加种子配置

示例生成器结构

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