Migraciones de bases de datos en JavaScript (Node.js): revisión completa de herramientas
Las migraciones de bases de datos son una forma de realizar cambios controlados y versionados en el esquema de la base de datos. En el mundo de Node.js, existen varias bibliotecas potentes que permiten automatizar este proceso. En este artículo, revisaremos las tres herramientas más populares: Sequelize, Knex.js y TypeORM.
¿Qué son las migraciones y por qué son necesarias?
Las migraciones resuelven el problema de sincronizar la estructura de la base de datos entre desarrolladores y entornos (dev, staging, production). En lugar de ejecutar scripts SQL manualmente, describes los cambios en código JavaScript/TypeScript. Ventajas:
- Aplicación automática de cambios
- Posibilidad de reversión (rollback) a una versión anterior
- Almacenamiento del historial de cambios en el repositorio
- Soporte para diferentes SGBD (PostgreSQL, MySQL, SQLite, etc.)
1. Sequelize — ORM con sistema de migraciones integrado
Sequelize es uno de los ORM más populares para Node.js. Proporciona una herramienta CLI para gestionar migraciones. Instalación:
npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli initDespués de la inicialización, se crean las carpetas migrations, models, seeders y el archivo de configuración config/config.json.
Creación de una migración
npx sequelize-cli migration:generate --name create-users-tableEjemplo del contenido de la migración:
'use strict';module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('Users', { id: { type: Sequelize.INTEGER, primaryKey: true, autoIncrement: true }, username: { type: Sequelize.STRING, allowNull: false, unique: true }, email: { type: Sequelize.STRING, allowNull: false }, createdAt: { type: Sequelize.DATE, allowNull: false }, updatedAt: { type: Sequelize.DATE, allowNull: false } }); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('Users'); }};Aplicación y reversión
npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo2. Knex.js — Constructor de consultas SQL con migraciones
Knex.js no es un ORM, sino un potente constructor de consultas. Su sistema de migraciones se considera uno de los más flexibles. Instalación:
npm install knex --savenpm install pg --save # o mysql, sqlite3npx knex initCreación y escritura de una migración
npx knex migrate:make create_posts_tableEjemplo de código:
exports.up = function(knex) { return knex.schema.createTable('posts', (table) => { table.increments('id').primary(); table.string('title', 255).notNullable(); table.text('content'); table.integer('user_id').unsigned().references('id').inTable('users'); table.timestamps(true, true); });};
exports.down = function(knex) { return knex.schema.dropTableIfExists('posts');};Comandos para trabajar
npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status # ver estadoKnex también admite «semillas» (seeds) para la carga inicial de datos:
npx knex seed:make 01_demo_usersnpx knex seed:run3. TypeORM — migraciones para proyectos TypeScript
TypeORM es un ORM moderno que soporta tanto JavaScript como TypeScript. Su sistema de migraciones está estrechamente integrado con los decoradores de entidades. Instalación:
npm install typeorm reflect-metadata --savenpm in También en la biblioteca
Mongoose para JavaScript (Node.js): guía completa con ejemplos
Envío de correo electrónico en Go
Internacionalización (i18n) en PHP: biblioteca gettext y enfoques modernos
Cliente Elasticsearch para Rust: biblioteca oficial elasticsearch-rs