Migraciones de bases de datos en JavaScript (Node.js): Herramientas y práctica
El desarrollo de aplicaciones web modernas en Node.js rara vez prescinde del trabajo con bases de datos. A medida que el proyecto crece, la estructura de las tablas, los índices y las relaciones cambian inevitablemente. La ejecución manual de scripts SQL en el servidor es un camino hacia el caos y los errores. La solución a este problema son las migraciones de bases de datos (database migrations). Se trata de un mecanismo de versionado de cambios en el esquema que permite al equipo de desarrolladores actualizar la estructura de la BD de forma sincronizada y segura.
En el ecosistema de JavaScript existen varias herramientas maduras para trabajar con migraciones. Analicemos tres enfoques clave utilizando bibliotecas populares como ejemplo.
1. Knex.js — constructor de consultas universal
Knex.js no es solo un constructor de SQL, sino también una herramienta completa para migraciones y siembra (relleno con datos de prueba). Es compatible con PostgreSQL, MySQL, SQLite y otros DBMS. La principal ventaja es que escribes las migraciones en JavaScript y Knex las traduce al dialecto de la base de datos específica.
Instalación y configuración
npm install knexnpm install pg # para PostgreSQLCreamos el archivo de configuración knexfile.js:
module.exports = { development: { client: 'pg', connection: { host: 'localhost', user: 'user', password: 'pass', database: 'mydb' }, migrations: { directory: './migrations' } }};Creación y ejecución de una migración
Creemos una migración para la tabla de usuarios:
npx knex migrate:make create_users_tableEn la carpeta migrations aparecerá un archivo con una marca de tiempo. Lo editamos:
exports.up = function(knex) { return knex.schema.createTable('users', (table) => { table.increments('id').primary(); table.string('username', 100).notNullable().unique(); table.string('email').notNullable(); table.timestamps(true, true); // created_at y updated_at });};
exports.down = function(knex) { return knex.schema.dropTableIfExists('users');};Aplicamos la migración:
npx knex migrate:latestRevertir la última migración:
npx knex migrate:rollbackKnex también permite ejecutar SQL puro dentro de las migraciones, si se requiere lógica específica.
2. Sequelize — ORM con potente sistema de migraciones
Sequelize es un ORM popular para Node.js, compatible con PostgreSQL, MySQL, MariaDB, SQLite y MSSQL. Su CLI proporciona comandos convenientes para generar y gestionar migraciones, estrechamente integradas con los modelos.
Primeros pasos
npm install sequelize sequelize-cli pgnpx sequelize-cli initCreamos un modelo y una migración con un solo comando:
npx sequelize-cli model:generate --name User --attributes username:string,email:stringEsto generará dos archivos: el modelo models/user.js y una migración en migrations/. Ejemplo de migración:
'use strict';module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.createTable('Users', { id: { allowNull: false, autoIncrement: true, primaryKey: true, type: Sequelize.INTEGER }, username: { type: Sequelize.STRING(100), allowNull: false, unique: true }, email: { type: Sequelize.STRING, allowNull: false }, createdAt: { allowNull: false, type: Sequelize.DATE }, updatedAt: { allowNull: false, type: Sequelize.DATE } }); }, down: async (queryInterface, Sequelize) => { await queryInterface.dropTable('Users'); }};Aplicación y reversión:
npx sequelize-cli db:m También en la biblioteca
Rate Limiting en PHP: guía completa para limitar solicitudes
Trabajo con fechas en JavaScript (Node.js): mejores bibliotecas
Thymeleaf para Java: guía completa con ejemplos