Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Что такое миграция в ORM?
Миграция в ORM — это версионированный набор инструкций, которые описывают изменения структуры базы данных. Это механизм для управления схемой БД, позволяющий командам совместно работать с изменениями, откатывать их и отслеживать историю эволюции базы.
Для чего нужны миграции?
- Версионирование схемы БД — как git, но для базы данных
- Команды на одной странице — все видят, какие изменения были внесены
- Откаты — возможность отменить изменение и вернуться к предыдущему состоянию
- Развёртывание на разные окружения — одинаковая схема везде
- История изменений — кто, когда и почему изменил структуру
Типичный жизненный цикл миграции
up (forward) ↑ ↓ down (rollback): состояние A → состояние B → состояние A
Пример с TypeORM
import { MigrationInterface, QueryRunner, Table } from "typeorm";
export class CreateUsersTable1234567890000 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.createTable(
new Table({
name: "users",
columns: [
{
name: "id",
type: "uuid",
isPrimary: true,
generationStrategy: "uuid",
default: "uuid_generate_v4()",
},
{
name: "email",
type: "varchar",
isUnique: true,
},
{
name: "created_at",
type: "timestamp",
default: "CURRENT_TIMESTAMP",
},
],
})
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.dropTable("users");
}
}
Пример с Sequelize
module.exports = {
up: async (queryInterface, Sequelize) => {
await queryInterface.createTable("users", {
id: {
type: Sequelize.UUID,
primaryKey: true,
defaultValue: Sequelize.UUIDV4,
},
email: {
type: Sequelize.STRING,
allowNull: false,
unique: true,
},
created_at: {
type: Sequelize.DATE,
defaultValue: Sequelize.NOW,
},
});
},
down: async (queryInterface) => {
await queryInterface.dropTable("users");
},
};
Best Practices при работе с миграциями
- Атомарные миграции — одна миграция = одно логическое изменение
- Всегда включайте откат (down) — не забывайте реализовать обратную операцию
- Тестируйте откаты — убедитесь, что down работает корректно
- Не редактируйте старые миграции — создавайте новые
- Описательные имена — CreateUsersTable, не migration_1
- Миграции в git — всегда коммитьте файлы миграций