Ответ
Миграция базы данных — это практика управления изменениями схемы БД (структуры таблиц, индексов, данных) с помощью версионируемых и обратимых скриптов. Это позволяет безопасно и согласованно применять изменения в различных окружениях (разработка, тестирование, продакшн).
Ключевые концепции:
- Версионирование: Каждая миграция имеет уникальный идентификатор (обычно временная метка или последовательный номер), что позволяет точно знать, какое состояние у БД.
- Повторяемость: Скрипт миграции должен быть идемпотентным или работать в рамках системы, которая отслеживает применённые миграции, чтобы их нельзя было применить дважды.
- Обратимость: У каждой миграции есть методы
up(применить изменение) иdown(откатить изменение). Это критически важно для отладки и отката неудачных релизов.
Пример миграции для создания таблицы в Laravel:
// database/migrations/2023_10_27_000001_create_users_table.php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
return new class extends Migration
{
// Метод для применения миграции
public function up(): void
{
Schema::create('users', function (Blueprint $table) {
$table->id(); // Первичный ключ bigint unsigned, auto_increment
$table->string('name', 100); // VARCHAR(100)
$table->string('email')->unique(); // VARCHAR(255) с уникальным индексом
$table->timestamp('email_verified_at')->nullable();
$table->string('password');
$table->rememberToken(); // Для системы "запомнить меня"
$table->timestamps(); // Создаёт created_at и updated_at (TIMESTAMP)
});
// Можно добавить отдельные индексы или ограничения
// Schema::table('users', function (Blueprint $table) {
// $table->index(['name', 'email']);
// });
}
// Метод для отката миграции
public function down(): void
{
Schema::dropIfExists('users');
}
};
Рабочий процесс и инструменты:
- Создание:
php artisan make:migration create_users_table. - Запуск:
php artisan migrate— применяет все неприменённые миграции. - Откат:
php artisan migrate:rollback— откатывает последний пакет миграций. - Статус:
php artisan migrate:status— показывает, какие миграции применены.
Интеграция в CI/CD: Миграции автоматически выполняются в пайплайне сборки или деплоя, что гарантирует, что схема БД в продакшене всегда соответствует требованиям кода. Это устраняет ручные правки SQL и связанные с ними человеческие ошибки.