Tipe-tipe Database — Database

Jenis-jenis Database Ada berbagai jenis database yang dirancang untuk kebutuhan berbeda. Memahami perbedaannya membantu kita memilih solusi yang tepat. 1…

Tipe database adalah bentuk dasar cara sebuah database menyusun datanya: tabel, dokumen, pasangan key dan value, jaringan titik dan garis, atau deretan angka menurut waktu. Bayangin lima petugas mencatat pesanan yang sama. Petugas pertama mengisi beberapa tabel bergaris yang saling menunjuk nomor. Petugas kedua menyimpan satu map per pesanan, isinya lengkap. Petugas ketiga menaruh tiap pesanan di loker bernomor. Petugas keempat menempel foto di papan dan menarik benang di antaranya. Petugas kelima cuma menulis jam dan angka di buku log. Datanya sama, tapi pertanyaan yang gampang dijawab tiap petugas beda-beda.

🧪 Tebakan cepat: Kedai Senja mau fitur "yang beli Kopi Susu biasanya juga beli...". Petugas mana yang paling cepat menjawabnya? Tebak dulu, jawabannya ada di bagian "Graph: titik dan garis".

Satu pesanan, lima bentuk

Kita pakai pesanan #1 Kedai Senja: Budi membeli 2 Kopi Susu (Rp18.000) dan 1 Roti Bakar (Rp20.000). Ada juga pesanan #2 (Budi, 1 Kopi Susu Aren) dan #3 (Siti, 1 Kopi Susu dan 1 Teh Tarik). Lab di halaman ini menyimpan ketiga pesanan itu dalam empat bentuk pertama, dan kamu bisa menanyakan hal yang sama ke masing-masing.

Relational: tabel yang saling menunjuk

Relational database menyimpan data dalam tabel berbaris dan berkolom, dan tabel-tabelnya terhubung lewat id. Bahasanya SQL. Contohnya PostgreSQL, MySQL dan SQLite. Pesanan #1 tersebar di empat tabel: customers, orders, order_items (satu baris per produk di pesanan, dibahas di pelajaran Kardinalitas) dan products. Untuk membacanya utuh, tabelnya digabung dengan JOIN:

SELECT c.name, p.name AS product, oi.qty, p.price
FROM orders o
JOIN customers c ON c.id = o.customer_id
JOIN order_items oi ON oi.order_id = o.id
JOIN products p ON p.id = oi.product_id
WHERE o.id = 1
ORDER BY oi.product_id;
name product qty price
Budi Kopi Susu 2 18000
Budi Roti Bakar 1 20000

Document: satu map berisi semuanya

Document database menyimpan satu dokumen (bentuknya seperti objek JSON) per data, lengkap dengan isinya. Contohnya MongoDB, Firestore dan CouchDB. Di MongoDB, pesanan #1 adalah satu dokumen:

db.orders.findOne({ _id: 1 })
// {
//   _id: 1,
//   customer: { _id: 1, name: 'Budi' },
//   items: [
//     { product: 'Kopi Susu', price: 18000, qty: 2 },
//     { product: 'Roti Bakar', price: 20000, qty: 1 }
//   ]
// }

Key-value: loker bernomor

Key-value store menyimpan pasangan key (nama loker) dan value (isinya). Contohnya Redis dan Memcached. Di redis-cli:

127.0.0.1:6379> SET session:7f3a "1"
OK
127.0.0.1:6379> GET session:7f3a
"1"

Graph: titik dan garis

Graph database menyimpan node (titik: Budi, pesanan #1, Kopi Susu) dan edge (garis berlabel: Budi PLACED pesanan #1, pesanan #1 CONTAINS Kopi Susu). Contohnya Neo4j, dengan bahasa Cypher:

MATCH (:Product {name: 'Kopi Susu'})<-[:CONTAINS]-(:Order)-[:CONTAINS]->(other:Product)
RETURN DISTINCT other.name

Hasilnya Roti Bakar dan Teh Tarik. Query-nya cuma mengikuti garis: dari node Kopi Susu mundur ke pesanan yang berisinya (#1 dan #3), lalu maju ke produk lain di pesanan itu. Jadi petugas berbenang merah, si graph database, yang paling enak menjawab tebakan tadi. Itu jawaban tebakannya. Relational juga bisa, tapi tabel order_items harus di-JOIN ke dirinya sendiri, dan tiap lompatan tambahan ("teman dari teman dari teman") berarti satu JOIN lagi. Graph database cocok untuk social network (pertemanan) dan rekomendasi.

Time-series: angka berbaris menurut waktu

Time-series database menyimpan nilai yang dicatat berkala, masing-masing dengan waktunya. Contohnya InfluxDB, TimescaleDB (tambahan untuk PostgreSQL) dan Prometheus. Kedai Senja mencatat suhu mesin kopinya tiap menit:

time suhu
08:00 92,5
08:01 93,1
08:02 91,8

Data seperti ini terus bertambah, hampir gak pernah diubah, dan ditanya per rentang waktu ("rata-rata suhu per jam hari ini"). Time-series database dibuat untuk itu, jadi cocok untuk monitoring server, sensor IoT, dan analitik.

Memilih yang mana

Kebutuhan Tipe
caching, session key-value
social network, rekomendasi graph
monitoring, IoT time-series
CMS, katalog document
sisanya: toko online, bank, data yang saling berelasi relational

Aplikasi nyata sering memakai lebih dari satu. Kedai Senja menyimpan pesanan di PostgreSQL (relational) dan session login di Redis (key-value). Kalau ragu, mulai dari relational: dia menjawab hampir semua pertanyaan dengan cukup baik.

⚠️ Jebakan yang sering ketemu

TL;DR: Relational menyimpan tabel yang saling menunjuk id, ditanya dengan SQL dan JOIN, kuat di relasi dan transaksi (toko online, bank). Document menyimpan satu dokumen utuh per data dengan bentuk yang boleh beda-beda (katalog, CMS). Key-value menyimpan pasangan key dan value di memori, super cepat tapi cuma kenal key (caching, session). Graph menyimpan node dan edge, enak untuk mengikuti hubungan berlapis (social network, rekomendasi). Time-series menyimpan angka menurut waktu (monitoring, IoT). Kalau ragu, mulai dari relational.

Yang akan kamu pelajari