数据库迁移助手Skill database-migration-helper

此技能帮助您创建遵循项目ORM约定和命名模式的数据库迁移文件,适用于Prisma、Sequelize、Alembic、Knex、TypeORM等ORM。在添加表格、修改架构或用户提及数据库变更时使用。

后端开发 0 次安装 0 次浏览 更新于 3/3/2026

name: database-migration-helper description: 创建遵循项目约定的数据库迁移文件,适用于Prisma、Sequelize、Alembic、Knex、TypeORM等ORM。在添加表格、修改架构或用户提及数据库变更时使用。 allowed-tools: 读取,搜索,全局搜索,写入,Bash

数据库迁移助手

此技能帮助您创建遵循项目ORM约定和命名模式的数据库迁移文件。

何时使用此技能

  • 用户请求创建数据库迁移
  • 向数据库添加新表格或列
  • 修改现有数据库架构
  • 创建索引、约束或关系
  • 用户提及"迁移"、“架构变更"或"数据库更新”

指令

1. 检测ORM/迁移工具

首先,确定项目使用的ORM或迁移工具:

  • Prisma:查找prisma/schema.prisma@prisma/client在package.json中
  • Sequelize:查找.sequelizercsequelize-cli在package.json中
  • Knex:查找knexfile.jsknex在package.json中
  • TypeORM:查找ormconfig.jsontypeorm在package.json中
  • Alembic(Python):查找alembic.inialembic/目录
  • Django:查找manage.py和Django迁移在*/migrations/
  • Active Record(Rails):查找db/migrate/目录
  • Flyway:查找flyway.confdb/migration/
  • Liquibase:查找liquibase.properties或变更日志文件

使用全局搜索来查找这些指示文件。

2. 检查现有迁移

阅读现有迁移文件以了解:

  • 命名约定(时间戳格式、描述格式)
  • 目录结构
  • 迁移文件格式(SQL、JavaScript、TypeScript、Python等)
  • 编码模式(up/down函数、forwards/rollback等)

使用搜索查找最近的迁移:在常见目录中查找,如:

  • prisma/migrations/
  • db/migrate/
  • migrations/database/migrations/
  • alembic/versions/

3. 生成迁移文件

根据检测到的ORM,创建适当的迁移文件:

Prisma

  • 运行npx prisma migrate dev --name <description> OR
  • 手动在prisma/migrations/<timestamp>_<name>/migration.sql中创建迁移SQL

Sequelize

  • 生成:npx sequelize-cli migration:generate --name <description>
  • 然后填写up/down函数以进行架构更改

Knex

  • 生成:npx knex migrate:make <description>
  • 填写exports.up和exports.down函数

TypeORM

  • 生成:npm run typeorm migration:create src/migrations/<Name>
  • 实现up()和down()方法

Alembic

  • 生成:alembic revision -m "<description>"
  • 填写upgrade()和downgrade()函数

Django

  • 运行:python manage.py makemigrations
  • 或手动在<app>/migrations/中创建迁移

Rails

  • 生成:rails generate migration <ClassName>
  • 填写change方法(或对于复杂迁移的up/down)

4. 遵循命名约定

使用一致的、描述性的名称:

  • add_user_email_indexcreate_products_tableadd_payment_status_to_orders
  • 不好migration1updatefix

根据项目模式格式化:

  • 时间戳前缀:20231215120000_add_email_to_users
  • 序列:001_create_users002_add_indexes

5. 包含上和下/回滚

始终提供两个方向(如果支持):

  • 上/升级/向前:应用架构更改
  • 下/降级/回滚:撤销架构更改

对于使用可逆操作的ORM(Rails、部分Sequelize),单个change方法可能足够。

6. 迁移内容指南

创建表格:

  • 定义所有列及其适当类型
  • 在适当的地方设置NOT NULL约束
  • 添加主键
  • 如果项目使用,则包括时间戳(created_at,updated_at)
  • 在同一迁移中添加外键和索引,或者如果项目更倾向于分开,则单独添加

修改表格:

  • 具体说明:ADD COLUMNDROP COLUMNMODIFY COLUMN
  • 适当处理现有数据(默认值,回填)
  • 考虑向后兼容性

添加索引:

  • 清晰命名索引:idx_users_emailidx_orders_user_id_created_at
  • 使用适当的索引类型(B-tree、Hash、GIN等)
  • 对于大型表格考虑部分索引

数据迁移:

  • 如果可能,将架构迁移与数据迁移分开
  • 对于大型数据集要小心(批量操作)
  • 用现实数据量测试回滚

7. 验证迁移安全性

在最终确定之前检查:

  • 可逆性:迁移可以回滚吗?
  • 数据丢失:会丢失任何数据吗?警告用户!
  • 停机时间:这会锁定表格吗?考虑大型表格的在线迁移
  • 依赖性:是否有必须首先运行的依赖迁移?

8. 测试建议

建议用户:

  • 首先在开发数据库上运行迁移
  • 测试回滚功能
  • 对于生产:在暂存环境中测试
  • 查看生成的SQL(对于自动生成SQL的ORM)

ORM特定模板

参考templates/目录中的模板:

  • prisma-migration.sql - Prisma迁移示例
  • sequelize-migration.js - Sequelize迁移示例
  • knex-migration.js - Knex迁移示例
  • typeorm-migration.ts - TypeORM迁移示例
  • alembic-migration.py - Alembic迁移示例
  • rails-migration.rb - Rails迁移示例

最佳实践

  1. 每个迁移一个目的:不要混合不相关的更改
  2. 描述性名称:名称应解释迁移的作用
  3. 时间戳:使用ORM的时间戳格式进行排序
  4. 尽可能幂等:安全地多次运行
  5. 测试回滚:确保down/rollback正确工作
  6. 为复杂逻辑添加文档:为非明显操作添加注释
  7. 批量大型操作:对于影响多行的数据迁移
  8. 使用事务:在支持时将操作包装在事务中

支持文件

  • templates/:各种ORM的迁移模板
  • reference.md:命名约定和迁移模式