TypeScript 中的数据库迁移:如何轻松管理模式
使用 TypeScript 进行开发不仅需要严格的代码类型化,还需要可靠地管理数据库结构。迁移是一种对数据库模式变更进行版本控制的方法,使团队能够将数据库状态与应用程序代码同步。本文将介绍 TypeScript 项目中用于迁移的主要库、它们的特点,并提供实际示例。
什么是迁移,为什么需要它们?
迁移是一个包含指令的文件,描述了数据库模式的变更(创建、修改或删除表、索引、关系)。使用迁移的优势:
- 版本控制 — 每次变更都记录在带有时间戳或编号的单独文件中。
- 可重现性 — 可以从头开始在任何版本上部署数据库。
- 团队协作 — 所有开发人员应用相同的变更。
- 回滚 — 能够撤销失败的变更。
TypeScript 中流行的迁移工具
1. TypeORM
TypeORM 是一个与 TypeScript 和 JavaScript 配合使用的 ORM。其内置的迁移系统基于命令行。
安装:
npm install typeorm reflect-metadatanpm install @types/node --save-dev生成迁移的示例:
npx typeorm migration:create src/migration/AddUserTable迁移代码示例:
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export class AddUserTable1234567890123 implements MigrationInterface { public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.createTable(new Table({ name: "users", columns: [ { name: "id", type: "int", isPrimary: true, isGenerated: true, generationStrategy: "increment" }, { name: "name", type: "varchar", length: "255" }, { name: "email", type: "varchar", length: "255", isUnique: true } ] })); }
public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.dropTable("users"); }}运行迁移:
npx typeorm migration:run优点: 与 TypeORM 紧密集成,基于实体自动生成。
缺点: 在复杂项目中可能较慢,需要配置设置。
2. Prisma
Prisma 是一个现代化的 ORM,拥有强大的迁移系统。它使用声明式 DSL(Prisma Schema Language)。
安装:
npm install prisma @prisma/clientnpx prisma init模式示例 (schema.prisma):
model User { id Int @id @default(autoincrement()) name String email String @unique posts Post[]}
model Post { id Int @id @default(autoincrement()) title String content String? authorId Int author User @relation(fields: [authorId], references: [id])}创建并应用迁移:
npx prisma migrate dev --name initPrisma 会自动创建 SQL 文件并将其应用到数据库。您还可以查看状态:
npx prisma migrate status优点: 声明式方法,自动生成,优秀的文档。
缺点: 与 Prisma 绑定,在特殊场景下难以绕过。
3. Knex.js
Knex.js 是一个轻量级的 Node.js 查询构建器,包含迁移系统。通过补充