Что такое миграции базы данных?

«Что такое миграции базы данных?» — вопрос из категории Базы данных, который задают на 26% собеседований Node.js Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Миграции базы данных — это практика управления изменениями схемы БД (структуры таблиц, индексов, отношений) с помощью версионированных скриптов. Это позволяет безопасно и предсказуемо развивать структуру данных вместе с кодом приложения.

Зачем это нужно в Node.js-проектах:

  • Воспроизводимость: Любой разработчик или сервер может привести схему БД к нужному состоянию, выполнив последовательность миграций.
  • Контроль версий: Скрипты миграций хранятся в репозитории вместе с кодом.
  • Безопасное развёртывание: Изменения применяются до запуска нового кода, который от них зависит.
  • Возможность отката: У каждой миграции есть «обратная» функция (down), позволяющая отменить изменения.

Пример миграции с использованием Knex.js (популярный query builder для Node.js):

// migrations/20231015_create_users_table.js

exports.up = function(knex) {
  // Операция применения миграции
  return knex.schema.createTable('users', function(table) {
    table.increments('id').primary();
    table.string('email').notNullable().unique();
    table.string('password_hash').notNullable();
    table.timestamp('created_at').defaultTo(knex.fn.now());
    table.timestamp('updated_at').defaultTo(knex.fn.now());
  });
};

exports.down = function(knex) {
  // Операция отката миграции
  return knex.schema.dropTable('users');
};

Работа с миграциями через CLI:

# Создать новую миграцию
npx knex migrate:make add_role_to_users

# Применить все неприменённые миграции
npx knex migrate:latest

# Откатить последнюю миграцию
npx knex migrate:rollback

В экосистеме Node.js для работы с миграциями также широко используются TypeORM, Sequelize и Prisma.