Пишете ли миграции базы данных самостоятельно или используете инструменты
Что проверяют
Относитесь ли вы к схеме базы как к коду и думаете ли о выкате без простоя. Ответ «использую инструмент» сам по себе ничего не говорит: спрашивают, что вы кладёте в миграцию и что делаете, когда её надо откатить.
Как отвечать
Опишите порядок: миграция это файл в репозитории, применённые отмечены в служебной таблице, уже применённый файл не редактируется никогда. В экосистеме Java это Liquibase или Flyway, в Spring Boot они подключаются стартером и накатываются при запуске приложения. SQL внутри вы пишете руками, инструмент отвечает за учёт и порядок.
Дальше то, что отличает опытного:
- автоматическое обновление схемы средствами ORM на бою выключено, генерация отдана миграциям;
- выкат совместимый: сначала добавили, потом заполнили, потом переключили чтение, потом убрали лишнее следующим релизом;
- заполнение большой таблицы идёт пачками, а не одним обновлением на всю таблицу;
- откат обычно делают новой миграцией вперёд, потому что удалённые данные обратным скриптом не вернуть.
Где спотыкаются
Полагаются на автоматическое обновление схемы из сущностей. Оно не переименовывает, не удаляет и ничего не спрашивает, а на проде превращается в набор изменений, о которых никто не просил и которые никто не читал.
Правят уже применённый файл миграции. Контрольная сумма перестаёт сходиться, у коллег и в CI запуск падает, а починка отключением проверки прячет настоящее расхождение схем между окружениями.
Забывают про блокировки. Добавление колонки с заполнением или построение индекса на большой таблице держит её так долго, что сервис встаёт. В PostgreSQL индекс умеет строиться без блокировки записи, а тяжёлое изменение разбивают на шаги.