Agent Skills
返回列表
数据库种子数据生成器

数据库种子数据生成器

开发编程 更新于 2026.08.29

将以下提示词粘贴到你的 AI 对话框中:

请根据 https://skillhub.cn/install/skillhub.md,安装 @user_fccf428b/database-seeding-builder。

技能介绍

要解决的问题

手工往开发库里填测试数据,通常意味着复制粘贴假邮箱、编造日期,偶尔还会撞上外键约束。另一种常见做法是写过一版 seed 脚本后就放着不管:换个环境跑就报唯一键冲突,数据量一放大就慢得离谱,或者日期写死导致几个月后测试开始"穿越"。

技能如何工作

这个技能围绕一套可重复执行的种子数据流程展开:

  • 分析目标 schema:检查所有表、列、约束(NOT NULL、UNIQUE、CHECK、外键)和表间关系,确定父表先于子表的插入顺序。
  • 设计数据策略:测试用固定随机种子保证可复现;开发环境用 Faker 生成逼真的姓名、邮箱、地址;预发环境可使用匿名化的生产快照。
  • 生成 seed 脚本:按项目语言(Python、JavaScript/TypeScript、SQL、Ruby)编写,用事务包裹写入以保证原子性,通过序列模式或计数器满足唯一约束。
  • 保证幂等性:使用 INSERT ... ON CONFLICT DO NOTHING、UPSERT 或先清空再插入的策略,脚本跑两次不应产生重复数据或报错。
  • 环境化 profile:本地开发 10–50 行,集成测试 1K–10K 行,压测 100K+ 行,通过环境变量或命令行参数切换。
  • 执行与校验:核对行数是否符合预期,验证外键均指向已存在的行,并记录每张表的写入结果。

适用边界与注意点

  • 固定 Faker.seed(42) 之类的种子值,测试结果才可复现;Faker 不保证大数据量下的唯一性,需要用 fake.unique.email() 或计数器兜底。
  • 循环外键需要分两轮写入:先插可空外键行,再回填外键值。
  • 超过一万行时改用批量写入(PostgreSQL COPY、MySQL LOAD DATA INFILE),导入后重建索引。
  • 依赖日期的逻辑要用相对当前时间的日期,避免写死后失效。
  • 绝不要往生产库灌测试数据,脚本顶部应加环境断言;写入后重置自增序列,防止主键碰撞。
  • 安全边界:不自动安装依赖、不改系统权限、不创建持久化任务;涉及发送、删除、部署等外部写入时先展示影响并取得确认。

使用场景

  • 本地开发环境缺少数据,需要快速生成 50 个用户和 200 条订单记录以调试分页逻辑,且要求重复运行不产生重复数据。
  • 预发环境需要贴近真实分布的 10 万条商品和订单数据做压测,同时要确保外键依赖的父表数据先于子表写入。
  • 编写 CI 流程中的集成测试,需要固定随机种子生成可复现的用户邮箱和注册时间,避免每次构建结果不一致。

适合人员

  • 后端工程师:需要在本地和 CI 环境中快速构造符合复杂外键约束的数据库快照,以验证业务逻辑和接口。
  • 测试工程师:需要为性能测试准备十万级以上的真实分布数据集,并确保测试环境的种子数据可重复执行。
  • 全栈开发者:在开发基于 Laravel 或 Django 的项目时,需要编写幂等的数据库种子脚本来填充开发库。