Cara Mengotomatisasi Migrasi DB dengan Claude Code
Pelajari cara mengotomatisasi migrasi database menggunakan Claude Code. Dilengkapi contoh kode praktis dan panduan langkah demi langkah.
Selesaikan Masalah Migrasi DB dengan Claude Code
Menulis file migrasi secara manual setiap kali ada perubahan skema adalah pekerjaan yang merepotkan dan rawan kesalahan. Dengan Claude Code, mulai dari perubahan desain skema, generate migrasi, hingga pembaruan seed data bisa ditangani sekaligus.
Migrasi dengan Prisma
Dari Desain Skema Sampai Eksekusi Migrasi
> Tambahkan tabel berikut ke skema Prisma, lalu generate dan terapkan migrasi.
>
> Tabel: Order
> - id: UUID, primary key
> - userId: foreign key ke User
> - items: OrderItem[] (one-to-many)
> - totalAmount: Decimal
> - status: enum (pending, confirmed, shipped, delivered, cancelled)
> - createdAt, updatedAt
Berikut contoh skema yang di-generate Claude Code.
enum OrderStatus {
pending
confirmed
shipped
delivered
cancelled
}
model Order {
id String @id @default(uuid())
userId String
user User @relation(fields: [userId], references: [id])
items OrderItem[]
totalAmount Decimal @db.Decimal(10, 2)
status OrderStatus @default(pending)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([userId])
@@index([status])
}
model OrderItem {
id String @id @default(uuid())
orderId String
order Order @relation(fields: [orderId], references: [id], onDelete: Cascade)
productId String
quantity Int
price Decimal @db.Decimal(10, 2)
}
Setelahnya, Claude Code secara otomatis menjalankan perintah migrasi.
npx prisma migrate dev --name add_order_tables
Migrasi dengan Drizzle
Jika menggunakan Drizzle ORM, kamu juga bisa memberikan instruksi serupa.
> Tambahkan tabel Order ke skema Drizzle ORM.
> Generate juga file migrasi.
import { pgTable, uuid, decimal, timestamp, pgEnum } from "drizzle-orm/pg-core";
import { relations } from "drizzle-orm";
import { users } from "./users";
export const orderStatusEnum = pgEnum("order_status", [
"pending", "confirmed", "shipped", "delivered", "cancelled",
]);
export const orders = pgTable("orders", {
id: uuid("id").defaultRandom().primaryKey(),
userId: uuid("user_id").notNull().references(() => users.id),
totalAmount: decimal("total_amount", { precision: 10, scale: 2 }).notNull(),
status: orderStatusEnum("status").default("pending").notNull(),
createdAt: timestamp("created_at").defaultNow().notNull(),
updatedAt: timestamp("updated_at").defaultNow().notNull(),
});
export const ordersRelations = relations(orders, ({ one, many }) => ({
user: one(users, { fields: [orders.userId], references: [users.id] }),
items: many(orderItems),
}));
Perubahan Skema yang Sudah Ada
Perubahan pada tabel yang sudah ada seperti penambahan atau rename kolom juga bisa diproses dengan aman.
> Terapkan perubahan berikut pada tabel users.
> - Tambahkan kolom phoneNumber (nullable)
> - Pecah name menjadi firstName dan lastName
> - Sertakan juga logika migrasi data yang sudah ada
Claude Code men-generate migrasi lengkap dengan script migrasi data.
-- Migrasi: split_user_name
ALTER TABLE "users" ADD COLUMN "first_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "last_name" VARCHAR(100);
ALTER TABLE "users" ADD COLUMN "phone_number" VARCHAR(20);
-- Migrasi data yang sudah ada
UPDATE "users"
SET
"first_name" = split_part("name", ' ', 1),
"last_name" = CASE
WHEN array_length(string_to_array("name", ' '), 1) > 1
THEN split_part("name", ' ', 2)
ELSE ''
END;
ALTER TABLE "users" ALTER COLUMN "first_name" SET NOT NULL;
ALTER TABLE "users" ALTER COLUMN "last_name" SET NOT NULL;
ALTER TABLE "users" DROP COLUMN "name";
Generate Seed Data
Data test untuk development juga bisa dibuat bersamaan.
> Buat 20 seed data untuk tabel Order.
> Distribusikan status secara merata.
> Gunakan data dummy yang realistis.
Konfirmasi Keamanan Migrasi
> Periksa riwayat migrasi saat ini,
> cek apakah ada masalah sebelum diterapkan ke produksi.
> Khususnya tunjukkan perubahan yang berisiko kehilangan data.
Untuk pola integrasi DB dalam pengembangan API, dijelaskan di Cara Mempercepat Pengembangan API. Selain itu, menulis aturan terkait database di CLAUDE.md akan meningkatkan keamanan. Untuk tips penulisannya, lihat Panduan Lengkap Menulis CLAUDE.md.
Summary
Dengan Claude Code, kamu bisa mengotomatisasi secara konsisten mulai dari desain skema DB, perubahan, generate migrasi, hingga pembuatan seed data. Terutama sangat powerful untuk migrasi kompleks yang melibatkan logika migrasi data.
Untuk penggunaan Prisma lebih detail, lihat Dokumentasi Resmi Prisma, dan untuk fitur Claude Code, lihat Dokumentasi Resmi Anthropic.
PDF Gratis: Cheatsheet Claude Code dalam 5 Menit
Cukup masukkan emailmu dan kami akan langsung mengirim cheatsheet PDF A4 satu halaman.
Kami menjaga data pribadimu dengan aman dan tidak pernah mengirim spam.
Tentang Penulis
Masa
Engineer yang aktif menggunakan Claude Code. Mengelola claudecode-lab.com, media teknologi 10 bahasa dengan lebih dari 2.000 halaman.
Artikel Terkait
7 pemeriksaan sebelum menerbitkan artikel Claude Code multibahasa setiap hari
Checklist praktis agar artikel Claude Code multibahasa yang diterbitkan setiap hari tidak kehilangan locale, tidak merusak CTA, dan tidak meninggalkan halaman lama di production.
Apa itu Codex Automations? Membiarkan AI mengurus konten saat kamu tidur
Panduan praktis memakai Codex Automations untuk analytics, artikel, CTA, deploy, dan monetisasi.
Claude Code × GCP Cloud Functions Panduan Lengkap | Pengembangan Serverless Super Cepat
Optimalkan GCP Cloud Functions dengan Claude Code. Implementasikan trigger HTTP/Pub/Sub/Firestore, pengujian lokal, dan otomatisasi deployment dengan contoh kode nyata dari pengalaman Masa.