Prisma Get Started: Instalasi, Skema, Migrasi, dan Query Das...
Prisma Get Started: Instalasi, Skema, Migrasi, dan Query Dasar
Mulai dari nol dengan Prisma: inisialisasi proyek, definisi skema, migrasi skema ke database, dan menjalankan kueri dasar menggunakan Prisma Client. Panduan ini memilih jalur cepat (SQLite) serta opsi PostgreSQL untuk produksi.
Prisma adalah ORM modern untuk ekosistem JavaScript/TypeScript. Anda mendeskripsikan model data pada schema.prisma, melakukan migrasi skema ke database, lalu memakai Prisma Client (type-safe) untuk membaca/menulis data dari kode aplikasi. Pada bagian akhir, Anda juga akan mencoba Prisma Studio untuk menjelajah data secara visual selama pengembangan.
- Prasyarat
- Inisialisasi Proyek & Prisma
- Menyusun Skema (schema.prisma)
- Migrasi Skema ke Database
- Kueri Dasar dengan Prisma Client
- Mengecek Data via Prisma Studio
- Opsi Produksi (PostgreSQL)
- Troubleshooting Ringkas
- Kesimpulan
- Sumber/Referensi
Prasyarat
- Node.js & npm terpasang.
- Koneksi internet untuk mengunduh dependensi.
- Terminal/PowerShell (boleh WSL/macOS/Linux/Windows).
Inisialisasi Proyek & Prisma
Langkah berikut membuat proyek Node minimal, memasang Prisma dan Prisma Client, lalu melakukan inisialisasi.
Copy
mkdir prisma-hello
cd prisma-hello
npm init -y
npm install prisma @prisma/client
npx prisma init --datasource-provider sqlitePerintah di atas menghasilkan folder prisma/ dan berkas .env dengan koneksi SQLite default (file:./dev.db), serta kerangka schema.prisma.
Menyusun Skema (schema.prisma)
Kita buat model sederhana: User dan Post (relasi satu->banyak). Simpan isi berikut ke prisma/schema.prisma.
prisma/schema.prismaCopy
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL") // default: file:./dev.db
}
model User {
id String @id @default(cuid())
email String @unique
name String
posts Post[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model Post {
id String @id @default(cuid())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@index([authorId], map: "idx_post_author")
}Migrasi Skema ke Database
Jalankan migrasi untuk menyinkronkan skema ke database dan mengenerate Prisma Client.
Copy
npx prisma migrate dev --name init_schemaPerintah ini membuat folder prisma/migrations/ berisi SQL yang diterapkan ke database lokal. Setelah sukses, Prisma Client siap dipakai.
Query Dasar dengan Prisma Client
Buat berkas src/app.ts, lalu isi dengan contoh CRUD sederhana berikut:
src/app.tsCopy
import { PrismaClient } from "@prisma/client";
const prisma = new PrismaClient();
async function main() {
// Buat user
const alice = await prisma.user.create({
data: { email: "alice@example.com", name: "Alice" },
});
// Buat beberapa post milik Alice
await prisma.post.createMany({
data: [
{ title: "Halo Prisma", content: "Memulai dengan Prisma.", authorId: alice.id, published: true },
{ title: "Konsep Skema", content: "Model, relasi, migrasi.", authorId: alice.id }
]
});
// Baca post terbit terbaru
const recent = await prisma.post.findMany({
where: { published: true },
orderBy: { createdAt: "desc" },
take: 10,
include: { author: { select: { email: true, name: true } } }
});
console.log("Post terbit:", recent);
// Update satu post
const first = recent[0];
if (first) {
const updated = await prisma.post.update({
where: { id: first.id },
data: { title: first.title + " (diperbarui)" }
});
console.log("Diupdate:", updated.id);
}
// Hapus post yang belum diterbitkan
const removed = await prisma.post.deleteMany({ where: { published: false } });
console.log("Dihapus:", removed.count, "post draft");
}
main()
.catch((e) => { console.error(e); process.exit(1); })
.finally(async () => { await prisma.$disconnect(); });Jalankan contoh di atas:
Copy
npm install -D typescript ts-node
npx ts-node src/app.tsMengecek Data via Prisma Studio
Selama pengembangan, Anda bisa mengecek isi tabel melalui antarmuka visual berikut.
Copy
npx prisma studioKeamanan: Prisma Studio ditujukan untuk lingkungan lokal/pengembangan. Jangan mempublikasikannya ke internet publik.Opsi Produksi (PostgreSQL)
Untuk produksi, ubah datasource menjadi postgresql dan sesuaikan .env. Berikut contoh singkat:
prisma/schema.prisma (cuplikan)Copy
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}File: .env (contoh)Copy
DATABASE_URL="postgresql://USER:PASS@HOST:5432/DBNAME?schema=public"Copy
npx prisma migrate dev --name init_pgLangkah query dan Studio sama seperti pada SQLite. Di tahap produksi, pertimbangkan connection pooling (mis. pgbouncer), indeks yang tepat, serta strategi backup/restore.
Troubleshooting Ringkas
- Gagal konek DB — Periksa
DATABASE_URL, hak akses jaringan, dan status layanan DB. - Migrasi gagal — Tinjau folder
prisma/migrations/, pastikan skema konsisten; jalankan ulang setelah koreksi. - Type error saat kueri — Pastikan
@prisma/clientterpasang dan client telah digenerate (terjadi otomatis saat install). - Studio tidak muncul — Pastikan port tidak bentrok; coba parametrik
--port(mis.npx prisma studio --port 5555).
Kesimpulan
Itu saja! Anda telah: inisialisasi proyek, menulis skema, menjalankan migrasi, menulis kueri CRUD, dan membuka Studio. Selanjutnya, Anda bisa menambah relasi lebih kompleks, menulis seeding, serta mengintegrasikan dengan framework favorit (Express/Next/Nest). Prisma menjaga konsistensi tipe dari skema hingga kode—kombinasi yang menyenangkan untuk tim modern.
Sumber/Referensi
- Prisma — Get started
- Quickstart: TypeScript & SQLite
- Prisma Schema Overview
- Prisma Client
- Migrate: Development & Production
- Prisma Studio
- Start from scratch (PostgreSQL)
.refs li{margin-left:18px}
/* Code blocks */
.codebox{margin:10px 0}
.codehead{display:flex;justify-content:space-between;align-items:center;background:var(--soft);border:1px solid #e2e8f0;border-bottom:none;border-radius:10px 10px 0 0;padding:8px 10px;font-size:14px;color:var(--ink-2)}
pre{background:var(--bg);color:var(--fg);border:1px solid var(--line);border-radius:10px;padding:12px;overflow:auto;margin:0}
code{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:14px;white-space:pre}
.copy{float:right;margin-left:auto;margin-bottom:6px;padding:6px 10px;border-radius:8px;border:1px solid var(--muted);background:#f8fafc;cursor:pointer}
.copy:disabled{opacity:.6;cursor:not-allowed}
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut elit tellus, luctus nec ullamcorper mattis, pulvinar dapibus leo.
Post Terkait
Panduan Lengkap Prisma untuk Basis Data Modern
Prisma adalah lapisan abstraksi basis data yang memberikan tipe statis, pengalaman pengembangan yang nyaman, dan alur mi...
Pilar Keandalan: Panduan Administrasi, Keamanan, dan Strategi Backup Data PostgreSQL Skala Produksi
Pelajari praktik terbaik untuk menjaga keamanan, memastikan ketersediaan tinggi (High Availability), dan merencanakan st...
Meningkatkan Efisiensi Basis Data: Teknik Indexing, Join Kompleks, dan Fungsi Query Tingkat Tinggi di PostgreSQL
Temukan cara menghubungkan data dari berbagai tabel dengan Join yang tepat, mengoptimalkan kecepatan pengambilan data de...