Advertisement

Panduan Lengkap Migration & Seeding di Database (Node.js & Sequelize)

 


Saat mengembangkan aplikasi dengan database, kamu pasti akan berurusan dengan struktur database dan data awal. Nah, di sinilah migration dan seeding berperan penting!

  • Migration membantu kamu mengelola perubahan struktur database.
  • Seeding memungkinkan kamu mengisi database dengan data awal (dummy data).

Dalam panduan ini, kita akan belajar:

  • Apa itu migration & seeding?
  • Kenapa penting?
  • Cara membuat migration di Sequelize
  • Cara membuat seeder di Sequelize 
  • Praktik terbaik dalam migration & seeding

Mari kita mulai! 

1. Apa itu Migration & Seeding?

Migration: Mengelola Struktur Database dengan Mudah

Migration di Sequelize adalah cara sistematis untuk membuat, mengubah, dan menghapus tabel database tanpa harus menulis SQL manual setiap kali ada perubahan.

  • Seperti Git untuk database! Kamu bisa membuat versi baru dan kembali ke versi sebelumnya jika ada kesalahan.
  • Otomatisasi perubahan struktur database seperti menambahkan atau menghapus kolom.
  • Memudahkan kolaborasi dalam tim karena semua perubahan tercatat dalam kode.

Tanpa Migration 

  • Menulis SQL manual untuk setiap perubahan.
  • Sulit rollback jika ada kesalahan.
  • Tidak standar antara developer yang berbeda.

Dengan Migration

  • Perubahan database tercatat dengan rapi.
  • Bisa diubah dan dikembalikan ke versi sebelumnya (rollback).
  • Memudahkan tim dalam sinkronisasi database.

Seeding: Mengisi Database dengan Data Dummy

Seeding adalah proses mengisi database dengan data awal secara otomatis.

Membantu testing & development tanpa harus input data manual.
Membuat dummy data untuk pengujian fitur CRUD.
Mempermudah deployment awal dengan data default yang dibutuhkan aplikasi.

2. Instalasi Sequelize CLI

Sebelum menggunakan migration dan seeding, pastikan Sequelize sudah diinstal.

Instal Sequelize dan Database Driver

npm install --save sequelize sequelize-cli
npm install --save pg pg-hstore  # Untuk PostgreSQL
npm install --save mysql2        # Untuk MySQL
npm install --save sqlite3       # Untuk SQLite

Kemudian, inisialisasi Sequelize dalam proyek:

npx sequelize-cli init

Ini akan membuat beberapa folder penting:

├── config
│   ├── config.json   // Konfigurasi database
├── models
│   ├── index.js      // Mengatur koneksi database
├── migrations        // Folder untuk migration
├── seeders           // Folder untuk seeder

3. Membuat dan Menjalankan Migration

Membuat Migration Baru

Gunakan perintah berikut untuk membuat migration:

npx sequelize-cli model:generate --name User --attributes name:string,email:string,age:integer

Ini akan menghasilkan file di folder migrations/, misalnya:

migrations/
└── 20250213084523-create-user.js

Menulis Migration Secara Manual

Buka file migration dan edit sesuai kebutuhan:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.createTable("Users", {
      id: {
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,
        allowNull: false,
      },
      name: {
        type: Sequelize.STRING,
        allowNull: false,
      },
      email: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true,
      },
      age: {
        type: Sequelize.INTEGER,
        allowNull: true,
      },
      createdAt: {
        type: Sequelize.DATE,
        allowNull: false,
      },
      updatedAt: {
        type: Sequelize.DATE,
        allowNull: false,
      },
    });
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.dropTable("Users");
  },
};

Menjalankan Migration

Setelah menulis migration, jalankan perintah:

npx sequelize-cli db:migrate

Hasilnya, tabel Users akan dibuat di database!

4. Rollback Migration (Undo Perubahan)

Jika ingin membatalkan migration terakhir:

npx sequelize-cli db:migrate:undo

Jika ingin membatalkan semua migration:

npx sequelize-cli db:migrate:undo:all

5. Membuat dan Menjalankan Seeder

Membuat Seeder Baru

Gunakan perintah berikut:

npx sequelize-cli seed:generate --name demo-users

Ini akan membuat file di seeders/:

seeders/
└── 20250213085000-demo-users.js

Menulis Seeder

Buka file di seeders/ dan isi dengan data dummy:

module.exports = {
  up: async (queryInterface, Sequelize) => {
    await queryInterface.bulkInsert("Users", [
      {
        name: "John Doe",
        email: "john@example.com",
        age: 30,
        createdAt: new Date(),
        updatedAt: new Date(),
      },
      {
        name: "Jane Doe",
        email: "jane@example.com",
        age: 25,
        createdAt: new Date(),
        updatedAt: new Date(),
      },
    ]);
  },
  down: async (queryInterface, Sequelize) => {
    await queryInterface.bulkDelete("Users", null, {});
  },
};

Menjalankan Seeder

Jalankan perintah berikut untuk mengisi database:

npx sequelize-cli db:seed:all

Menghapus Data Seeder

Jika ingin menghapus data yang telah dimasukkan oleh seeder:

npx sequelize-cli db:seed:undo

Jika ingin menghapus semua seeder:

npx sequelize-cli db:seed:undo:all

6. Best Practices dalam Migration & Seeding

  • Jangan edit migration yang sudah dijalankan! Jika ada perubahan, buat migration baru.
  • Gunakan seeding hanya untuk development/testing, bukan untuk production data.
  • Pastikan seeder memiliki timestamp createdAt dan updatedAt.
  • Gunakan up() untuk menambahkan dan down() untuk menghapus data dengan benar.
  • Gunakan .env untuk mengelola konfigurasi database agar lebih fleksibel.

Kesimpulan: Jadi Master Migration & Seeding di Sequelize!

  • Migration membantu mengelola struktur database tanpa SQL manual.
  • Seeding memungkinkan pengisian database dengan data awal.
  • Sequelize CLI menyediakan perintah mudah untuk membuat migration & seeding.
  • Rollback tersedia untuk membatalkan perubahan jika ada kesalahan.

Dengan migration dan seeding, kamu bisa mengembangkan aplikasi dengan database yang lebih terstruktur, fleksibel, dan mudah dikelola

Sekarang, kamu sudah siap membangun aplikasi database dengan Sequelize seperti seorang profesional! 

Post a Comment

0 Comments