Skip to content

Database Overview

Project Structure – Database Migration

πŸ“¦ Git Repository:
https://gitlab.komerce.id/devops/database-migration


Struktur repository ini digunakan untuk mengelola file-file migrasi database dari berbagai jenis database seperti MariaDB, MySQL, PostgreSQL, dan MongoDB.
Setiap folder database berisi subfolder per aplikasi atau modul (misalnya affiliate, komcards, dll).

β”œβ”€β”€ mariadb/
β”‚ β”œβ”€β”€ affiliate
β”‚ β”œβ”€β”€ komcards/
β”‚ β”‚ β”œβ”€β”€ changelogs
β”‚ β”‚ β”‚ └── 20230801000000_init.sql
β”‚ β”‚ └── .gitkeep
β”œβ”€β”€ mongodb/
β”œβ”€β”€ mysql/
β”œβ”€β”€ postgresql/
β”œβ”€β”€ create-migration-file.sh
└── readme.md

Folder / FileDeskripsi
mariadb/Menyimpan file migrasi untuk database MariaDB. Setiap subfolder mewakili project/module.
mongodb/Menyimpan script migrasi atau seeding data untuk MongoDB (jika digunakan).
mysql/Menyimpan migrasi untuk MySQL Database. Struktur mirip dengan folder mariadb/.
postgresql/Menyimpan file migrasi untuk PostgreSQL.
create-migration-file.shScript shell otomatis untuk membuat file migrasi baru dengan format timestamp.
readme.mdDokumentasi utama repository.

Contoh struktur folder migrasi di dalam salah satu project (misalnya komcards):

mariadb/
└── komcards/
β”œβ”€β”€ changelogs/
β”‚ β”œβ”€β”€ 20230801000000_init.sql
β”‚ β”œβ”€β”€ 20230915090000_add_users_table.sql
β”‚ └── 20231020094500_alter_transactions_table.sql
└── .gitkeep

Setiap file migrasi mengikuti format:

Contoh:

  • 20230801000000_init.sql
  • 20230915090000_add_users_table.sql

Repository ini menggunakan strategi Git Branching Standard untuk menjaga kestabilan dan workflow development.

BranchTujuanKeterangan
masterProduction-readyKode yang siap dan sudah digunakan di produksi.
stagingStaging environmentUntuk testing sebelum masuk ke production.
developmentDevelopment environmentTempat pengembangan aktif dan integrasi feature baru.
feature/*Feature developmentDigunakan untuk membuat fitur baru. Contoh: feature/migration-add-user-table
bugfix/*Bug fixesUntuk memperbaiki bug yang ditemukan di development atau staging.
hotfix/*Urgent production fixPerbaikan kritis langsung pada production (master).

Sebelum membuat file migration baru:

  1. Pull branch master terbaru

    Terminal window
    git checkout master
    git pull origin master
  2. Buat branch baru dari master Gunakan format:

    Terminal window
    feature/migration-<nama-migration>

    Contoh

    Terminal window
    git checkout -b feature/migration-add-user-table
  3. Jalankan Skrip:

    Terminal window
    bash create-migration-file.sh
  4. Ikuti Petunjuk: Skrip akan meminta Anda untuk memilih:

    • Direktori Jenis Database: Pilih jenis database (misalnya, mariadb, mysql, postgresql).
    • Direktori Nama Database: Pilih skema atau nama pengguna database yang relevan (misalnya komship).
    • Komentar Migrasi: Masukkan deskripsi singkat tentang migrasi (contoh: create table users).
    • Query SQL Lengkap: Masukkan pernyataan SQL untuk migrasi Anda (misalnya, CREATE TABLE users (id INT PRIMARY KEY, name VARCHAR(255));). Tekan Ctrl+D di baris baru setelah selesai.
    • Query SQL Rollback Lengkap: Masukkan pernyataan SQL untuk mengembalikan migrasi (misalnya, DROP TABLE users). Tekan Ctrl+D di baris baru setelah selesai.
  5. Hasil: Skrip akan secara otomatis membuat file .sql baru di dalam direktori [database_type]/[nama_db]/changelogs/ dengan nama yang diformat berdasarkan timestamp dan komentar Anda (contoh: 202507040930_create_table_mahasiswa5.sql). Contoh:

    --liquibase formatted sql
    --changeset febriyan:202506040854
    --comment: create table users
    create table users (
    id int primary key auto_increment not null,
    name varchar(50) not null,
    address varchar(50),
    city varchar(30)
    )
    --rollback DROP TABLE users;

    Pastikan query rollbacknya hanya terdiri dari satu baris

Setelah migration siap:

Push branch ke remote:

Terminal window
git push origin feature/migration-add-user-table

Buat Merge Request (MR) ke branch sesuai kebutuhan:

  • Jika untuk pengujian β†’ merge ke development

  • Jika untuk staging β†’ merge ke staging

  • Jika untuk produksi β†’ merge ke master

⚠️ Catatan Penting: Jangan pernah membuat merge request dari development atau staging ke branch kamu sendiri. Semua feature baru harus berasal dari master.

πŸ“˜ Last Updated: 2025-10-30 πŸ§‘β€πŸ’» Maintained by: Backend Team – Komerce