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.
Related Posts
Cara Mempercepat Side Project dengan Claude Code [Dengan Contoh]
Pelajari cara mempercepat project development personal secara drastis menggunakan Claude Code. Dilengkapi contoh nyata dan workflow praktis dari ide hingga deployment.
Cara Mengotomatisasi Refactoring dengan Claude Code
Pelajari cara mengotomatisasi code refactoring secara efisien menggunakan Claude Code. Dilengkapi prompt praktis dan pola refactoring konkret untuk project nyata.
Panduan Lengkap Konfigurasi CORS dengan Claude Code
Pelajari tentang panduan lengkap konfigurasi CORS menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.