Schema Migration Patterns — Database

Apa itu Schema Migration? Schema migration adalah cara mengelola perubahan struktur database secara terstruktur dan version-controlled. Setiap perubahan dicatat

Apa itu Schema Migration?

Schema migration adalah cara mengelola perubahan struktur database secara terstruktur dan version-controlled. Setiap perubahan dicatat sebagai file migration yang bisa dijalankan (up) atau di-rollback (down).

Mengapa Migration?

Contoh Migration (Laravel)

// Migration: create_products_table
public function up(): void
{
    Schema::create('products', function (Blueprint $table) {
        $table->id();
        $table->string('name');
        $table->decimal('price', 10, 2);
        $table->text('description')->nullable();
        $table->timestamps();
    });
}

public function down(): void
{
    Schema::dropIfExists('products');
}

Migration Best Practices

1. Additive Changes (Aman)

-- Menambah kolom baru (aman, backward compatible)
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- Menambah index (aman, tapi bisa lambat untuk tabel besar)
CREATE INDEX CONCURRENTLY idx_users_phone ON users(phone);

2. Destructive Changes (Hati-hati)

-- Menghapus kolom (data hilang permanen!)
ALTER TABLE users DROP COLUMN phone;

-- Mengubah tipe data (bisa gagal jika data tidak kompatibel)
ALTER TABLE users ALTER COLUMN age TYPE SMALLINT;

3. Zero-Downtime Migration Pattern

-- Step 1: Tambah kolom baru (deploy 1)
ALTER TABLE users ADD COLUMN email_new VARCHAR(255);

-- Step 2: Backfill data (background job)
UPDATE users SET email_new = LOWER(email);

-- Step 3: Switch kode untuk pakai kolom baru (deploy 2)
-- Step 4: Hapus kolom lama (deploy 3)
ALTER TABLE users DROP COLUMN email;
ALTER TABLE users RENAME COLUMN email_new TO email;

Yang akan kamu pelajari