Migrações de banco de dados em JavaScript (Node.js): visão geral completa das ferramentas
Migrações de banco de dados são uma forma de alterar o esquema do banco de dados de maneira controlada e versionada. No mundo Node.js, existem várias bibliotecas poderosas que permitem automatizar esse processo. Neste artigo, veremos as três ferramentas mais populares: Sequelize, Knex.js e TypeORM.
O que são migrações e por que são necessárias?
As migrações resolvem o problema de sincronizar a estrutura do banco de dados entre desenvolvedores e ambientes (dev, staging, production). Em vez de executar scripts SQL manualmente, você descreve as alterações em código JavaScript/TypeScript. Vantagens:
- Aplicação automática de alterações
- Possibilidade de reversão (rollback) para a versão anterior
- Armazenamento do histórico de alterações no repositório
- Suporte a diferentes SGBDs (PostgreSQL, MySQL, SQLite e outros)
1. Sequelize — ORM com sistema de migrações integrado
Sequelize é um dos ORMs mais populares para Node.js. Ele fornece uma ferramenta CLI para gerenciar migrações. Instalação:
npm install --save sequelizenpm install --save-dev sequelize-clinpx sequelize-cli initApós a inicialização, são criadas as pastas migrations, models, seeders e o arquivo de configuração config/config.json.
Criando uma migração
npx sequelize-cli migration:generate --name create-users-tableExemplo de conteúdo da migração:
'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'); }};Aplicação e reversão
npx sequelize-cli db:migratenpx sequelize-cli db:migrate:undo2. Knex.js — Construtor de consultas SQL com migrações
Knex.js não é um ORM, mas um poderoso construtor de consultas. Seu sistema de migrações é considerado um dos mais flexíveis. Instalação:
npm install knex --savenpm install pg --save # ou mysql, sqlite3npx knex initCriando e escrevendo uma migração
npx knex migrate:make create_posts_tableExemplo 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 trabalhar
npx knex migrate:latestnpx knex migrate:rollbacknpx knex migrate:status # visualizar statusKnex também suporta "sementes" (seeds) para preenchimento inicial de dados:
npx knex seed:make 01_demo_usersnpx knex seed:run3. TypeORM — migrações para projetos TypeScript
TypeORM é um ORM moderno que suporta tanto JavaScript quanto TypeScript. Seu sistema de migrações é fortemente integrado com decoradores de entidades. Instalação:
npm install typeorm reflect-metadata --savenpm in