Migraciones de bases de datos en Node.js: Resumen de herramientas y ejemplos

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 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 PostgreSQL


Creamos 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_table


En 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:latest


Revertir la última migración:

npx knex migrate:rollback


Knex 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 init


Creamos un modelo y una migración con un solo comando:

npx sequelize-cli model:generate --name User --attributes username:string,email:string


Esto 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                    

Recommendations