Ответ
Миграции базы данных — это практика управления изменениями схемы БД (структуры таблиц, индексов, отношений) с помощью версионированных скриптов. Это позволяет безопасно и предсказуемо развивать структуру данных вместе с кодом приложения.
Зачем это нужно в 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.