Sobes.tech
Middle

Kaip galima keistis pakeitimais duomenų bazėje iš versijų kontrolės perspektyvos?

sobes.tech AI

Atsakymas iš AI

Применяются скрипты миграции. Каждый скрипт представляет собой изменение схемы или данных (создание таблиц, изменение колонок, вставка данных по умолчанию). Скрипты версионируются вместе с кодом приложения в системе контроля версий (Git, Mercurial).

Основные подходы:

  1. Versioned scripts: Каждый скрипт имеет уникальный номер версии или метку времени, определяющую порядок его выполнения.

    -- V1__create_users_table.sql
    CREATE TABLE Users (
        Id INT PRIMARY KEY,
        Name NVARCHAR(255)
    );
    
    -- V2__add_email_to_users.sql
    ALTER TABLE Users ADD Email NVARCHAR(255);
    

    Система управления миграциями отслеживает, какие скрипты уже выполнены в конкретной базе данных.

  2. Checksum-based scripts: Использование хеш-сумм скриптов для определения их уникальности и изменений. Изменение скрипта приводит к изменению его хеш-суммы, что сигнализирует системе управления миграциями о необходимости его повторного применения или ошибки.

Инструменты для управления миграциями:

  • Entity Framework Core Migrations: Интегрированный в .NET Core/5/6/7/8 ORM.
    // dotnet ef migrations add InitialCreate
    // dotnet ef database update
    
  • FluentMigrator: Популярная open-source библиотека.
    [Migration(202301011000)]
    public class CreateUsersTable : Migration
    {
        public override void Up()
        {
            Create.Table("Users")
                .WithColumn("Id").AsInt32().PrimaryKey()
                .WithColumn("Name").AsString(255);
        }
    
        public override void Down()
        {
            Delete.Table("Users");
        }
    }
    
  • DbUp: Еще одна open-source библиотека, ориентированная на скрипты SQL.
    // Пример использования DbUp
    var upgrader =
        DeployChanges.To
            .SqlDatabase(connectionString)
            .WithScriptsFromFileSystem(@"./Scripts")
            .LogToConsole()
            .Build();
    
     var result = upgrader.PerformUpgrade();
    
  • Flyway: Кросс-платформенный инструмент, поддерживает множество баз данных.
  • Liquibase: Аналогичен Flyway, поддержка XML, YAML, JSON и SQL форматов для описания миграций.

Процесс обмена изменениями:

  1. Разработчик вносит изменения в код, затрагивающие структуру БД (например, добавляет новое поле в модель).
  2. Разработчик создает скрипт миграции (вручную или с помощью инструмента) для этих изменений.
  3. Скрипт миграции коммитится в репозиторий вместе с изменениями в коде.
  4. Другие разработчики или CI/CD пайплайн вытягивают изменения.
  5. При развертывании или локальном запуске приложения автоматически или вручную запускается инструмент управления миграциями.
  6. Инструмент проверяет состояние целевой БД, определяет, какие скрипты еще не были применены, и выполняет их в правильном порядке.

Преимущества такого подхода:

  • Отслеживаемость: История изменений БД видна в системе контроля версий.
  • Воспроизводимость: Возможность привести любую базу данных к определенной версии схемы.
  • Автоматизация: Процесс развертывания изменений БД может быть автоматизирован.
  • Сотрудничество: Упрощается работа нескольких разработчиков над одной БД.