ERD Database: Cara Baca dan Bikin Diagram Relasi Tabel
TL;DR
ERD (Entity Relationship Diagram) adalah diagram yang nunjukin tabel apa aja di sebuah database dan gimana tabel-tabel itu saling nyambung lewat primary key dan foreign key. Notasi yang paling umum dipakai namanya crow's foot — garis dengan tiga cabang di ujungnya artinya banyak, garis lurus artinya satu. ERD dibuat sebelum tabelnya dibikin, biar kamu ketahuan salah desain waktu masih gampang diperbaiki.
ERD (Entity Relationship Diagram) adalah gambar yang nunjukin tabel apa aja di sebuah database dan gimana tabel-tabel itu saling nyambung. Satu kotak = satu tabel. Garis antar kotak = relasinya.
Kenapa penting? Karena waktu kamu dikasih database 40 tabel di kerjaan baru, ERD yang ngasih tau kamu harus JOIN lewat kolom apa. Tanpa itu, kamu buka satu-satu tabelnya dan nebak.
Aku bakal ajarin cara baca notasi crow's foot, terus kita bikin ERD dari nol buat toko sembako — lengkap sampai jadi SQL.
Apa itu ERD?
ERD adalah diagram yang nggambarin tiga hal: entitas (tabel), atribut (kolom), dan relasi (gimana tabelnya nyambung).
Satu entitas digambar sebagai kotak. Nama tabelnya di atas, daftar kolomnya di bawah. Kolom yang jadi primary key biasanya dikasih tanda kunci atau digarisbawahi.
Relasi digambar sebagai garis yang nyambungin dua kotak. Simbol di ujung garis yang ngasih tau: satu baris di tabel A nyambung ke berapa baris di tabel B.
ERD dibikin sebelum tabelnya dibuat. Ini poin pentingnya. Salah desain di kertas itu murah. Salah desain setelah 6 bulan data masuk, itu mahal.
Gimana cara baca notasi crow's foot?
Crow's foot (kaki gagak) adalah notasi yang paling banyak dipakai. Namanya dari simbol tiga cabang di ujung garis yang mirip kaki burung.
Ada empat simbol dasar:
| Simbol | Artinya |
|---|---|
| Garis lurus tunggal (|) | Tepat satu |
| Kaki gagak (tiga cabang) | Banyak (nol atau lebih) |
| Lingkaran kecil (O) | Nol — artinya opsional |
| Kaki gagak + garis | Satu atau lebih |
Simbol di ujung dibaca berpasangan. Contoh: garis lurus di sisi cabang, kaki gagak di sisi transaksi. Bacanya: satu cabang punya banyak transaksi, dan satu transaksi cuma punya satu cabang.
Tiga jenis relasi yang bakal kamu temuin:
- One-to-many (1:N) — paling umum. Satu cabang punya banyak transaksi.
- One-to-one (1:1) — jarang. Satu karyawan punya satu nomor NPWP.
- Many-to-many (N:M) — butuh tabel jembatan. Satu transaksi punya banyak produk, satu produk ada di banyak transaksi.
Kenapa many-to-many butuh tabel jembatan?
Ini yang paling sering bikin orang mentok.
Satu transaksi bisa isi 5 produk. Satu produk (misal Beras 5kg) bisa muncul di 3.000 transaksi. Ini relasi many-to-many.
Masalahnya: database relasional gak bisa nyimpen banyak nilai di satu kolom. Kamu gak bisa nulis id_produk = 3, 7, 12, 19, 44 di satu sel.
Solusinya bikin tabel ketiga yang tiap barisnya nyimpen satu pasangan:
CREATE TABLE transaksi_item (
id_transaksi INT REFERENCES transaksi(id_transaksi),
id_produk INT REFERENCES produk(id_produk),
qty INT NOT NULL,
harga_saat_transaksi INT NOT NULL,
PRIMARY KEY (id_transaksi, id_produk)
);
Transaksi yang isinya 5 produk = 5 baris di tabel ini.
Di ERD, relasi many-to-many jadi dua relasi one-to-many yang ketemu di tengah. Kaki gagak nunjuk ke tabel jembatan dari dua arah.
Bonus: tabel jembatan bisa nyimpen info yang cuma masuk akal buat pasangan itu — kayak qty dan harga_saat_transaksi. Info itu gak nempel ke produk doang atau transaksi doang.
Bikin ERD dari nol: toko_berkah
Dataset toko_berkah di ngulikdata isinya 18.400 transaksi dari 6 cabang UMKM sembako. Ini gimana ERD-nya dibikin.
Langkah 1: Cari kata bendanya
Tulis alur bisnisnya dalam satu kalimat, terus lingkari kata bendanya.
"Pelanggan beli beberapa produk di sebuah cabang, dicatat sebagai satu transaksi. Tiap produk punya kategori."
Lima kata benda = lima kandidat tabel: pelanggan, produk, cabang, transaksi, kategori.
Langkah 2: Tentuin relasinya
Buat tiap pasang tabel, tanya dua arah:
- Satu cabang punya berapa transaksi? Banyak. Satu transaksi punya berapa cabang? Satu. → one-to-many.
- Satu pelanggan punya berapa transaksi? Banyak. Satu transaksi punya berapa pelanggan? Satu. → one-to-many.
- Satu kategori punya berapa produk? Banyak. Satu produk punya berapa kategori? Satu. → one-to-many.
- Satu transaksi punya berapa produk? Banyak. Satu produk ada di berapa transaksi? Banyak. → many-to-many, butuh jembatan.
Jadi total 6 tabel: 5 tadi plus transaksi_item sebagai jembatan.
Langkah 3: Terjemahin jadi SQL
ERD yang bener bisa langsung diterjemahin ke CREATE TABLE tanpa mikir lagi. Aturannya sederhana: di relasi one-to-many, foreign key selalu ditaruh di sisi "many".
CREATE TABLE cabang (
id_cabang INT PRIMARY KEY,
nama VARCHAR(50),
kota VARCHAR(50)
);
CREATE TABLE transaksi (
id_transaksi INT PRIMARY KEY,
tanggal DATE NOT NULL,
id_cabang INT REFERENCES cabang(id_cabang),
id_pelanggan INT REFERENCES pelanggan(id_pelanggan)
);
Kolom id_cabang ada di transaksi, bukan sebaliknya. Kalau kebalik, kamu gak bisa nyimpen lebih dari satu transaksi per cabang.
Langkah 4: Pakai ERD-nya buat nulis JOIN
Ini bagian yang bikin ERD kepake tiap hari. Garis di ERD = kolom yang dipakai buat JOIN.
SELECT
c.nama AS cabang,
SUM(ti.qty * ti.harga_saat_transaksi) AS omzet,
COUNT(DISTINCT t.id_transaksi) AS jumlah_transaksi
FROM transaksi t
JOIN cabang c ON c.id_cabang = t.id_cabang
JOIN transaksi_item ti ON ti.id_transaksi = t.id_transaksi
WHERE t.tanggal BETWEEN '2026-01-01' AND '2026-12-31'
GROUP BY c.nama
ORDER BY omzet DESC;
Hasilnya: Depok di puncak dengan omzet Rp 221 juta dari 2.576 transaksi. Rata-rata per transaksi Rp 85.800.
Bandingin sama Bekasi: omzet Rp 118 juta dari 3.104 transaksi — rata-rata cuma Rp 38.000 per transaksi. Bekasi lebih rame tapi nilainya kecil.
Insight itu keluar dalam 2 menit karena aku tau harus JOIN lewat mana. ERD yang ngasih tau.
Kesalahan umum waktu bikin ERD
1. Naruh foreign key di sisi yang salah
Kalau kamu naruh id_transaksi di tabel cabang, satu cabang cuma bisa punya satu transaksi. Aturan bakunya: foreign key selalu di sisi "many".
2. Lupa tabel jembatan buat many-to-many
Orang sering nyoba nyambungin transaksi dan produk langsung. Hasilnya: kolom produk yang isinya "3,7,12,19". Itu langsung ngelanggar bentuk normal pertama, dan bikin query kamu penuh LIKE yang gak akurat.
3. Bikin ERD setelah tabelnya jadi
ERD gunanya buat mikir sebelum ngoding. Kalau kamu bikin ERD setelah 20 tabel udah jalan, itu cuma dokumentasi — dan kesempatan buat benerin desainnya udah lewat.
4. Nulis semua kolom di ERD
Buat diskusi desain, cukup tulis primary key, foreign key, dan 2-3 kolom penting. ERD yang isinya 40 kolom per kotak gak ada yang mau baca. Detail lengkapnya taruh di skema SQL-nya.
5. Gak bedain relasi opsional dan wajib
Transaksi harus punya cabang. Tapi transaksi bisa gak punya pelanggan (pembeli anonim yang gak mau kasih nomor HP). Beda ini digambar pakai lingkaran kecil di ujung garis, dan diterjemahin jadi NOT NULL atau boleh NULL di SQL.
Aturan lengkap soal foreign key dan constraint bisa kamu baca di dokumentasi constraint PostgreSQL.
Tool buat bikin ERD
Tiga yang paling kepake:
- dbdiagram.io — kamu ketik definisi tabelnya pakai teks, diagramnya kegambar otomatis. Gratis dan paling cepat buat pemula.
- draw.io — gambar manual, kontrol penuh. Gratis.
- DBeaver — bisa generate ERD otomatis dari database yang udah ada. Kepake banget waktu kamu warisin database orang.
Buat sketsa awal, kertas dan pulpen juga sah. Yang dinilai relasinya bener, bukan gambarnya rapi.
FAQ
ERD itu buat apa kalau databasenya udah jadi?
Buat ngerti struktur database yang kamu warisin dari orang lain. Waktu kamu masuk kerjaan baru dan disodorin database 40 tabel, ERD ngasih tau tabel mana nyambung ke mana — dan itu langsung ngasih tau JOIN-nya lewat kolom apa. Tanpa ERD, kamu harus buka satu-satu tabelnya dan nebak sendiri. Banyak tool bisa generate ERD otomatis dari database yang udah ada.
Apa itu notasi crow's foot?
Crow's foot adalah cara nulis relasi di ERD pakai simbol di ujung garis. Tiga cabang kayak kaki burung artinya banyak. Garis lurus tunggal artinya satu. Lingkaran kecil artinya nol atau opsional. Jadi garis lurus di satu ujung dan kaki gagak di ujung lain berarti one-to-many: satu baris di tabel kiri bisa punya banyak pasangan di tabel kanan.
Kenapa relasi many-to-many butuh tabel tambahan?
Karena database relasional gak bisa nyimpen banyak nilai di satu kolom. Satu transaksi bisa punya banyak produk, dan satu produk bisa ada di banyak transaksi. Gak ada tempat buat nyimpen itu di dua tabel doang. Solusinya tabel jembatan yang tiap barisnya nyimpen satu pasangan transaksi-produk, plus kolom tambahan kayak qty.
Tool apa yang enak buat bikin ERD?
Buat pemula, dbdiagram.io paling gampang — kamu ketik definisi tabelnya pakai teks, diagramnya kegambar otomatis. Alternatif gratis lain: draw.io buat gambar manual, dan DBeaver yang bisa generate ERD dari database yang udah ada. Buat sketsa cepat, kertas dan pulpen juga sah. Yang penting relasinya bener, bukan gambarnya cakep.
Bedanya ERD sama skema database apa?
ERD itu gambarnya, skema itu definisi teknisnya dalam bentuk SQL. ERD dipakai buat mikir dan komunikasi sama orang lain sebelum ngoding. Skema yang beneran dieksekusi ke database lewat CREATE TABLE. Biasanya kamu gambar ERD dulu, dapet persetujuan, baru terjemahin jadi skema. Satu ERD yang bener bisa langsung diterjemahin ke SQL tanpa mikir lagi.
Penutup
Yang perlu kamu inget:
- Kaki gagak = banyak. Garis lurus = satu. Lingkaran = opsional.
- Di relasi one-to-many, foreign key selalu ditaruh di sisi "many".
- Many-to-many wajib punya tabel jembatan. Gak ada pengecualian.
- Garis di ERD = kolom buat JOIN. Itu yang bikin ERD kepake tiap hari, bukan cuma pas desain.
Coba sekarang: ambil satu proses bisnis yang kamu ngerti — pesan makanan online, absen kantor, apapun. Tulis satu kalimat, lingkari kata bendanya, gambar kotaknya, tarik garisnya. Lima belas menit, dan kamu udah punya ERD pertama.
Lanjut baca: normalisasi database buat mastiin tabel di ERD kamu gak nyimpen data dobel, dan primary key buat paham gimana tiap baris dikasih identitas unik.
Mau praktek langsung? Mulai latihan SQL gratis
Latihan interaktif, langsung di browser.
Artikel Terkait
Churn Rate SQL: Deteksi Pelanggan yang Kabur Sejak Dini
Studi kasus toko_berkah: 1.240 pelanggan hilang dalam setahun, dan sinyalnya udah kelihatan 2 bulan sebelumnya. Ini query yang bikin kamu nangkap mereka lebih awal.
YoY Growth SQL: Bandingkan Performa dengan Tahun Lalu
Hitung YoY growth di SQL pakai LAG atau self-join, lengkap dengan cara ngindarin pembagi nol dan jebakan bulan yang bolong. Contohnya pakai data toko_berkah.
MoM Growth SQL: Hitung Pertumbuhan Bulanan Otomatis
Berhenti copy-paste omzet bulan lalu ke Excel buat ngitung growth. Satu query SQL pakai LAG bisa ngasih pertumbuhan bulanan otomatis, lengkap sampai bulan yang datanya kosong.