Panduan

Apa Itu ORM? Cara Aplikasi Berbicara dengan Database, Dijelaskan

ORM (object-relational mapper) adalah pustaka kode yang berada di antara aplikasi dan database relasional. Alih-alih menulis query database dalam SQL, developer bekerja dengan data sebagai objek biasa dalam bahasa pemrograman mereka, misalnya db.booking.create(...) atau Booking.find(...). ORM lalu menerjemahkannya menjadi SQL, menjalankannya, dan mengubah hasilnya kembali menjadi objek. Contoh yang populer adalah Prisma dan Drizzle untuk TypeScript, SQLAlchemy untuk Python, dan Entity Framework Core untuk C#.

Mengapa ORM penting saat membangun dengan AI

Ketika AI app builder menambahkan database ke aplikasimu, biasanya ia juga menambahkan ORM untuk berkomunikasi dengannya. Kamu tidak perlu menulis kode ORM sendiri, tetapi penting untuk tahu bahwa ORM itu ada:

  • Model data kamu ada di dalam kode. File schema ORM sering menjadi deskripsi paling jelas tentang data aplikasimu: tabel apa saja yang ada, field apa saja yang dimiliki masing-masing, dan bagaimana keduanya terhubung. Membacanya adalah cara cepat untuk memeriksa apakah AI sudah memahami aplikasimu.
  • Perubahan database lewat migrasi. Saat kamu meminta "tambahkan nomor telepon ke customer", AI akan mengubah model dan membuat migrasi. Dengan memahami itu, kamu bisa mengerti mengapa sebuah perubahan mungkin perlu diterapkan dulu sebelum berfungsi di lingkungan live.
  • Aman secara default. ORM membangun query dengan cara yang melindungi dari SQL injection, salah satu celah keamanan paling umum pada aplikasi yang menyusun query secara manual.
  • Jebakan performa. ORM mudah membuat aplikasi menjalankan ratusan query kecil padahal satu query sudah cukup. Ini sering menjadi penyebab halaman lambat di aplikasi yang dibuat dengan AI.

Analogi sehari-hari

Bayangkan seorang turis asal Inggris dan seorang pemilik toko asal Jepang yang tidak berbagi bahasa, lalu berkomunikasi lewat penerjemah.

Turisnya (aplikasimu) berkata, "Saya mau tiga teh termurah yang kamu punya." Penerjemahnya (ORM) mengubahnya menjadi bahasa Jepang yang tepat (SQL), menyampaikannya ke pemilik toko (database), lalu menerjemahkan jawabannya kembali ke bahasa Inggris.

Turisnya tidak perlu belajar bahasa Jepang, dan untuk sebagian besar percakapan itu tidak masalah. Namun untuk negosiasi yang rumit, berbicara langsung bisa membantu, itulah sebabnya kebanyakan ORM memungkinkan developer menulis SQL mentah saat diperlukan.

Cara kerja ORM

Database seperti Postgres menyimpan data dalam tabel berisi baris dan kolom, dan diquery dengan SQL. Bahasa pemrograman bekerja dengan objek: sebuah booking dengan date, customer, dan status. ORM memetakan keduanya:

Sisi databaseSisi ORM / kode
Tabel bookingsModel Booking
BarisSatu objek booking
Kolom starts_atField startsAt
Foreign key customer_idRelasi booking.customer
SELECT, INSERT, UPDATE, DELETEMetode find, create, update, delete

Keempat operasi itu adalah aksi CRUD yang menjadi dasar hampir semua aplikasi.

Contoh nyata: booking dengan Prisma

Berikut schema Prisma yang disederhanakan untuk aplikasi booking salon. Schema ini mendeskripsikan dua tabel dan cara keduanya terhubung:

model Customer {
  id       Int       @id @default(autoincrement())
  name     String
  email    String    @unique
  bookings Booking[]
}

model Booking {
  id         Int      @id @default(autoincrement())
  startsAt   DateTime
  service    String
  customer   Customer @relation(fields: [customerId], references: [id])
  customerId Int
}

Dengan bahasa sederhana: setiap customer punya nama, email yang unik, dan banyak booking; setiap booking punya waktu mulai, layanan, dan termasuk milik satu customer.

Sekarang aplikasi ingin menampilkan "booking mendatang milik Lena, dari yang paling dekat":

const bookings = await db.booking.findMany({
  where: {
    customer: { email: "lena@example.com" },
    startsAt: { gte: new Date() },
  },
  orderBy: { startsAt: "asc" },
});

ORM menerjemahkannya kira-kira menjadi SQL seperti ini, menjalankannya, dan mengembalikan daftar objek booking:

SELECT b.* FROM "Booking" b
JOIN "Customer" c ON c.id = b."customerId"
WHERE c.email = $1 AND b."startsAt" >= $2
ORDER BY b."startsAt" ASC;

$1 dan $2 adalah placeholder: email dan tanggal dikirim terpisah dari teks query, dan inilah yang mencegah SQL injection.

Migrasi

Jika kemudian kamu meminta "biarkan customer menambahkan nomor telepon", AI akan menambahkan phone String? ke model Customer (tanda ? berarti opsional) dan membuat migrasi, yaitu skrip SQL kecil seperti ALTER TABLE "Customer" ADD COLUMN "phone" TEXT;. Migrasi disimpan berurutan sehingga setiap salinan database bisa dibawa ke struktur yang sama, dan riwayat perubahannya tetap tercatat.

ORM umum berdasarkan bahasa

BahasaORM yang umum
TypeScript / JavaScriptPrisma, Drizzle, TypeORM, Sequelize
PythonSQLAlchemy, Django ORM, SQLModel
C#Entity Framework Core
JavaHibernate (sering lewat Spring Data JPA)
RubyActive Record

ORM berbeda dalam seberapa banyak SQL yang disembunyikan. Prisma memakai bahasa schema dan gaya query sendiri; Drizzle sengaja tetap dekat dengan bentuk SQL sambil tetap menjaga semuanya bertipe data. Alat yang lebih ringan bernama query builder, seperti Knex atau Kysely untuk TypeScript, membantu membangun SQL di dalam kode tanpa memetakan baris menjadi objek lengkap.

Istilah penting

IstilahArtinya
ModelDefinisi kode dari sebuah tabel dan field-fieldnya.
SchemaDeskripsi lengkap semua tabel, field, dan relasinya.
RelasiHubungan antar model, misalnya booking yang milik seorang customer.
MigrasiSkrip berversi yang mengubah struktur database.
Query builderAlat yang lebih ringan untuk membangun SQL di dalam kode tanpa pemetaan objek penuh.
Masalah N+1Menjalankan satu query untuk daftar, lalu satu query lagi untuk setiap item, yang lambat ketika data membesar.
Raw SQLSQL yang ditulis manual, dipakai saat ORM justru menghalangi.

Kesalahpahaman umum

  • "ORM adalah database." Bukan. ORM adalah penerjemah. Kamu tetap membutuhkan database seperti Postgres.
  • "Dengan ORM, kamu tidak perlu memahami datamu." Tabel yang dirancang buruk tetap menyulitkan meskipun lewat ORM. Model data yang baik lebih penting daripada alatnya.
  • "ORM selalu lambat." Query sehari-hari biasanya baik-baik saja. Perlambatan biasanya berasal dari pola seperti query N+1 atau indeks yang tidak ada, dan itu bisa diperbaiki.
  • "ORM berarti tidak ada risiko SQL injection, selamanya." Metode ORM standar memang aman, tetapi raw SQL yang disusun dengan menempelkan input pengguna tetap berbahaya.
  • "Mengedit file schema langsung mengubah database live." Hanya setelah migrasi dibuat dan diterapkan ke database tersebut.

Yang bisa kamu tanyakan ke AI builder

  • "Tunjukkan schema database dan jelaskan setiap tabel serta relasinya dengan bahasa yang sederhana."
  • "ORM apa yang dipakai project ini, dan di mana file migrasinya?"
  • "Sebelum mengubah tabel apa pun, beri tahu aku apakah data yang ada akan terpengaruh, dan jangan pernah menghapus kolom yang berisi data tanpa bertanya dulu."
  • "Periksa halaman yang paling lambat untuk query N+1, dan tambahkan indeks di tempat daftar difilter atau diurutkan."
  • "Pastikan setiap query yang memakai input pengguna melewati ORM atau memakai parameter, bukan SQL yang dirangkai dari string."

ORM di Mythex

Ketika aplikasimu perlu menyimpan data, Mythex menambahkan database Postgres khusus ke project. Minta lewat chat atau gunakan perintah /database, lalu detail koneksinya disuntikkan ke workspace dan aplikasi yang dipublikasikan (Database). Agent kemudian menulis kode yang membaca dan menyimpan datamu. Jika kamu punya preferensi, misalnya "pakai Prisma", "pakai SQLAlchemy", atau "SQL biasa, tanpa ORM", sampaikan di chat. Mintalah agent menjelaskan schema kapan pun kamu ingin memeriksa strukturnya; kamu juga bisa membaca file-filenya di code editor. Untuk gambaran yang lebih besar, lihat apa itu database dan SQL vs NoSQL.

Pertanyaan

Apa itu ORM dengan bahasa sederhana?

ORM (object-relational mapper) adalah pustaka kode yang berada di antara aplikasi dan database relasional. ORM memungkinkan developer membaca dan menyimpan data sebagai objek biasa dalam bahasa pemrograman mereka, lalu ORM menulis query SQL-nya di balik layar.

Apa saja contoh ORM?

ORM yang umum antara lain Prisma dan Drizzle untuk TypeScript dan JavaScript, SQLAlchemy dan Django ORM untuk Python, Entity Framework Core untuk C#, Hibernate untuk Java, dan Active Record di Ruby on Rails.

Apakah ORM lebih baik daripada menulis SQL?

Tergantung kebutuhannya. ORM membuat operasi baca dan tulis sehari-hari lebih cepat ditulis, lebih aman, dan lebih mudah diubah, sedangkan SQL yang ditulis manual memberi kontrol penuh untuk laporan yang kompleks atau query yang sangat memengaruhi performa. Kebanyakan ORM tetap memungkinkan kamu turun ke SQL mentah saat dibutuhkan.

Apa itu migrasi?

Migrasi adalah skrip kecil dan berversi yang mengubah struktur database, misalnya menambahkan tabel atau kolom. ORM bisa membuat migrasi dari model data kamu sehingga setiap salinan database, baik di laptop, di tahap pengujian, maupun di produksi, memiliki struktur yang sama.

Mythex · Pricing · Bangun apa pun dengan AI · Template website dan aplikasi · Mythex dibandingkan · Glosarium membuat aplikasi dengan AI · Alat gratis untuk membuat aplikasi dengan AI · English

English አማርኛ العربية Български বাংলা Bosanski Català Čeština Dansk Deutsch Ελληνικά Español Español (España) Eesti فارسی Suomi Français Français (Canada) ગુજરાતી हिन्दी Hrvatski Magyar Հայերեն Íslenska Italiano 日本語 ქართული Қазақ тілі ಕನ್ನಡ 한국어 Lietuvių Latviešu Македонски മലയാളം Монгол मराठी Bahasa Melayu မြန်မာ Norsk bokmål Nederlands ਪੰਜਾਬੀ Polski Português (Brasil) Português (Portugal) Română Русский Slovenčina Slovenščina Soomaali Shqip Srpski Svenska Kiswahili தமிழ் తెలుగు ไทย Tagalog Türkçe Українська اردو Tiếng Việt 简体中文 繁體中文(香港) 繁體中文(台灣)