Gymterview
junior

Что такое changelog, changeset, author и id?

Changelog, changeset, author и id — четыре базовых понятия Liquibase, образующие иерархию миграций.

Changelog — корневой файл (или набор файлов), в котором описаны все изменения БД. Это «журнал» миграций. Changelog может включать другие changelog-файлы через include или includeAll.

Changeset — минимальная единица изменения БД. Каждый changeset содержит одно или несколько изменений, которые применяются как единое целое (в рамках одной транзакции, если СУБД поддерживает DDL-транзакции).

Author — строка, идентифицирующая автора changeset. Обычно указывается имя разработчика или его логин.

Id — уникальный идентификатор changeset в рамках данного changelog-файла. Вместе с author и именем файла образует уникальный ключ changeset.

Уникальность changeset определяется тройкой: id + author + путь к файлу changelog.

Пример в XML
<changeSet id="1" author="ivanov">
    <createTable tableName="users">
        <column name="id" type="BIGINT" autoIncrement="true">
            <constraints primaryKey="true" nullable="false"/>
        </column>
        <column name="username" type="VARCHAR(255)">
            <constraints nullable="false" unique="true"/>
        </column>
    </createTable>
</changeSet>
Пример в YAML
databaseChangeLog:
  - changeSet:
      id: 1
      author: ivanov
      changes:
        - createTable:
            tableName: users
            columns:
              - column:
                  name: id
                  type: BIGINT
                  autoIncrement: true
                  constraints:
                    primaryKey: true
                    nullable: false
              - column:
                  name: username
                  type: VARCHAR(255)
                  constraints:
                    nullable: false
                    unique: true

На собеседовании: ключевой момент — назвать тройку уникальности (id + author + filename). Частая ошибка — думать, что id уникален глобально, тогда как он уникален только в контексте автора и файла.