Migraciones de bases de datos en TypeScript: guía completa de herramientas y enfoques

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Migraciones de bases de datos en TypeScript: cómo gestionar el esquema sin dolor

El desarrollo con TypeScript requiere no solo una tipificación estricta del código, sino también una gestión confiable de la estructura de la base de datos. Las migraciones son una forma de versionar los cambios en el esquema de la BD, permitiendo al equipo sincronizar el estado de la base de datos con el código de la aplicación. En este artículo analizaremos las principales bibliotecas para migraciones en proyectos TypeScript, sus características y proporcionaremos ejemplos prácticos.



¿Qué son las migraciones y por qué son necesarias?

Una migración es un archivo con instrucciones que describen cambios en el esquema de la base de datos (creación, modificación o eliminación de tablas, índices, relaciones). Ventajas de usar migraciones:

  • Versionado — cada cambio se registra en un archivo separado con una marca de tiempo o número.
  • Reproducibilidad — se puede desplegar la base de datos desde cero en cualquier versión.
  • Trabajo en equipo — todos los desarrolladores aplican los mismos cambios.
  • Reversión — posibilidad de deshacer cambios fallidos.


Herramientas populares para migraciones en TypeScript



1. TypeORM

TypeORM es un ORM que funciona con TypeScript y JavaScript. Su sistema de migraciones integrado se basa en la línea de comandos.

Instalación:

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

Ejemplo de generación de migración:

npx typeorm migration:create src/migration/AddUserTable

Ejemplo de código de migración:

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

Ejecución de migraciones:

npx typeorm migration:run

Ventajas: integración estrecha con TypeORM, generación automática basada en entidades.

Desventajas: puede ser lento en proyectos complejos, requiere configuración.



2. Prisma

Prisma es un ORM moderno con un potente sistema de migraciones. Utiliza un DSL declarativo (Prisma Schema Language).

Instalación:

npm install prisma @prisma/clientnpx prisma init

Ejemplo 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])}

Creación y aplicación de migración:

npx prisma migrate dev --name init

Prisma crea automáticamente un archivo SQL y lo aplica a la base de datos. También se puede ver el estado:

npx prisma migrate status

Ventajas: enfoque declarativo, generación automática, excelente documentación.

Desventajas: vinculado a Prisma, difícil de eludir en escenarios especiales.



3. Knex.js

Knex.js es un constructor de consultas ligero para Node.js que incluye un sistema de migraciones. Funciona con TypeScript mediante complementos.

Recommendations