Migrações de banco de dados em TypeScript: guia completo sobre ferramentas e abordagens

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Migrações de banco de dados em TypeScript: como gerenciar o esquema sem dor

O desenvolvimento em TypeScript exige não apenas tipagem estrita do código, mas também um gerenciamento confiável da estrutura do banco de dados. Migrações são uma forma de versionar alterações no esquema do BD, permitindo que a equipe sincronize o estado do banco com o código da aplicação. Neste artigo, analisaremos as principais bibliotecas para migrações em projetos TypeScript, suas características e forneceremos exemplos práticos.



O que são migrações e por que são necessárias?

Uma migração é um arquivo com instruções que descrevem alterações no esquema do banco de dados (criação, modificação ou exclusão de tabelas, índices, relacionamentos). Vantagens de usar migrações:

  • Versionamento — cada alteração é registrada em um arquivo separado com um carimbo de data/hora ou número.
  • Reprodutibilidade — é possível implantar o banco do zero em qualquer versão.
  • Trabalho em equipe — todos os desenvolvedores aplicam as mesmas alterações.
  • Rollback — possibilidade de desfazer alterações malsucedidas.


Ferramentas populares para migrações em TypeScript



1. TypeORM

TypeORM é um ORM que funciona com TypeScript e JavaScript. O sistema de migrações integrado é baseado em linha de comando.

Instalação:

npm install typeorm reflect-metadatanpm install @types/node --save-dev

Exemplo de geração de migração:

npx typeorm migration:create src/migration/AddUserTable

Exemplo de código de migração:

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"); }}

Execução de migrações:

npx typeorm migration:run

Vantagens: integração estreita com TypeORM, geração automática baseada em entidades.

Desvantagens: em projetos complexos pode ser lento, requer configuração.



2. Prisma

Prisma é um ORM moderno com um poderoso sistema de migrações. Usa uma DSL declarativa (Prisma Schema Language).

Instalação:

npm install prisma @prisma/clientnpx prisma init

Exemplo de esquema (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])}

Criação e aplicação de migração:

npx prisma migrate dev --name init

Prisma cria automaticamente um arquivo SQL e o aplica ao banco de dados. Também é possível visualizar o status:

npx prisma migrate status

Vantagens: abordagem declarativa, geração automática, excelente documentação.

Desvantagens: vinculado ao Prisma, difícil de contornar em cenários especiais.



3. Knex.js

Knex.js é um construtor de consultas leve para Node.js, que inclui um sistema de migrações. Funciona com TypeScript através de complementos

Recommendations