数据库种子数据生成
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @user_3c6cb52e/database-seeding-skillhub。
技能介绍
解决的实际问题
在开发与测试环境中,手动填充数据库种子数据常面临三类问题:数据重复导致测试结果不可复现、外键依赖处理不当引发约束冲突、不同环境数据量需求难以统一管理。这些问题会拖慢迭代速度,尤其在集成测试或性能压测阶段尤为明显。
核心工作步骤
- 模式分析与依赖排序:首先解析目标数据库的表结构,识别所有列、数据类型、约束(如
NOT NULL、UNIQUE)和外键关系,确定父表先于子表的插入顺序,避免违反外键约束。 - 数据策略选择:根据使用场景选择数据生成方式——固定种子的确定性数据用于可复现测试、
Faker生成的真实数据用于开发环境、匿名化生产快照用于预发布。同时按环境定义数据量(开发环境每表 10-50 条、集成测试 1000-10000 条、性能测试 10 万+条)。 - 幂等脚本生成:编写匹配项目技术栈(Python/JavaScript/SQL/Ruby)的种子脚本,支持
INSERT ON CONFLICT DO NOTHING、UPSERT 或截断后插入策略确保可重复运行,并通过事务保证插入原子性。 - 环境配置与执行验证:通过环境变量切换种子配置,执行后验证行数是否符合预期、外键关系是否完整,并记录各表填充结果。
适用边界与注意事项
- 严禁向生产环境填充测试数据,建议在脚本中添加环境检查(如
assert os.environ["ENV"] != "production")。 - 大数据量填充需使用批量方法(如 PostgreSQL 的
COPY、MySQL 的LOAD DATA INFILE),避免单条INSERT导致性能瓶颈。 - 处理循环外键时,可先插入无外键约束的行,再更新外键值;生成时间相关数据时需基于当前日期动态生成,避免硬编码过期日期。
使用场景
- 本地开发环境需要少量用户、产品、订单种子数据,且脚本可重复执行不产生重复记录
- 集成测试前批量填充中等规模数据,插入顺序必须符合外键依赖,避免约束冲突
- 性能测试前为每表生成十万级以上订单相关数据,使用 COPY 等批量方式加载
- 预发布环境需要接近真实分布的数据,同时对生产快照做匿名化处理后导入
适合人员
- 后端工程师:需要在开发/集成环境快速构建与迁移一致的种子数据集
- QA 自动化测试工程师:需要生成可重复、确定性的测试数据来断言接口结果
- 数据库管理员/预发布负责人:需要在上线前用匿名化快照填充预发布库并保持外键完整性
- 全栈开发者:需要用 Faker 生成符合表结构与唯一约束的真实感数据来联调前端页面