Lewati ke konten utama
menjadi.dev
Chapter 45.3 Mobile Lanjutan

SQLite dengan WatermelonDB

Database relasional di mobile — query, relasi, dan sync

Tujuan Pembelajaran

  • Memahami kapan butuh database SQL di mobile
  • Mampu menggunakan WatermelonDB untuk data kompleks
  • Mengerti difference antara key-value store dan relational database

Analogi

Diagram

      AsyncStorage/MMKV = Sticky Notes (satu informasi per note)
WatermelonDB = Excel Spreadsheet (data terstruktur, query, filter)

Kalau kamu cuma perlu simpan token → sticky note cukup.
Kalau kamu perlu simpan 500 task + filter + sort → butuh spreadsheet.
    

AsyncStorage seperti sticky note — simpel, satu data per note. WatermelonDB seperti spreadsheet — untuk data terstruktur yang perlu query, sort, filter, dan relasi.

Penjelasan Konsep

WatermelonDB adalah database performant untuk React Native — dibangun di atas SQLite dengan lazy-loading architecture. Hanya load data yang diperlukan, bukan seluruh database ke memory.

Kapan butuh SQL database: (1) Data ribuan records — key-value manual filter tidak scalable. (2) Data berelasi — tasks → project, comments → post, order → order_items. (3) Query kompleks — filter by date, sort by priority, group by category. (4) Offline-first apps dengan sync ke server.

WatermelonDB concepts: (1) Schema — definisikan model (tables beserta columns). (2) Model — class yang mewakili satu table. (3) Collection — immutable record set. (4) Query — deklaratif, observable, lazy. (5) Relation — one-to-many, many-to-many.

Model definition: class Task extends Model { static table = 'tasks'; static associations = { ... } }. Columns: @text('name'), @date('created_at'), @children('comments'), @relation('project_id', 'project_id').

Query: database.get('tasks').query(Q.where('status', 'active'), Q.sortBy('priority', Q.desc)). Query bersifat reactive — observable, auto re-render saat data berubah.

Sync: WatermelonDB punya sync engine — pull from server, push local changes. Conflict resolution built-in. Cocok untuk offline-first apps yang butuh data tetap konsisten antara device dan server.

Inti yang Perlu Dipahami

Bagian ini berfokus pada memahami kapan butuh database SQL di mobile., mampu menggunakan WatermelonDB untuk data kompleks., dan mengerti difference antara key-value store dan relational database. Jangan terburu-buru menghafal istilahnya. Lebih penting untuk memahami peran setiap konsep dan kapan konsep itu muncul dalam pekerjaan web development.

Saat membaca SQLite dengan WatermelonDB, gunakan tujuan belajar sebagai penanda arah. Kalau kamu sudah bisa menjelaskan tujuan itu dengan kata-katamu sendiri, berarti fondasinya mulai terbentuk.

Cara Membayangkannya

AsyncStorage seperti sticky note — simpel, satu data per note. WatermelonDB seperti spreadsheet — untuk data terstruktur yang perlu query, sort, filter, dan relasi. Analogi ini dipakai supaya konsep teknis tidak terasa melayang. Hubungkan setiap istilah dengan perannya: siapa yang meminta, siapa yang memproses, data apa yang berpindah, dan hasil apa yang diharapkan.

Kalau analoginya sudah terasa masuk akal, barulah lihat istilah teknisnya. Cara ini membuat materi lebih mudah dipahami daripada langsung menghafal definisi.

Saat Melihat Contoh Kode

Contoh kode pada chapter ini memakai bahasa tsx. Bacalah contoh kode sebagai ilustrasi alur, bukan sebagai bagian yang harus langsung dihafal. SQLiteAdapter dengan JSI (JavaScript Interface) untuk performa native. Schema define tabel dan kolom. Database instance tunggal.

Perhatikan nama fungsi, urutan langkah, dan data yang berpindah. Biasanya tiga hal itu sudah cukup untuk memahami hubungan antara teori dan praktik.

Konteks dalam Perjalanan Belajar

Setiap konsep di platform ini dipilih karena dipakai di industri. Fokus pada pemahaman, bukan hafalan.

Kamu sudah di bagian lanjutan. Mulai pikirkan bagaimana konsep ini dipakai di dunia kerja — bukan hanya untuk belajar, tapi untuk membangun produk nyata.

Gunakan pertanyaan reflektif dan prompt AI di akhir chapter sebagai latihan aktif. Membaca saja tidak cukup — kamu perlu menjelaskan ulang dengan kata-katamu sendiri.

Contoh Kode

tsx
import { Database } from "@nozbe/watermelondb";
import SQLiteAdapter from "@nozbe/watermelondb/adapters/sqlite";
import { schema, Task, Project } from "./models";

const adapter = new SQLiteAdapter({ schema, jsi: true, onSetUpError: console.error });
export const database = new Database({ adapter, modelClasses: [Task, Project] });

Penjelasan Kode

SQLiteAdapter dengan JSI (JavaScript Interface) untuk performa native. Schema define tabel dan kolom. Database instance tunggal.

Prompt AI

Desain schema WatermelonDB untuk aplikasi notes: folders (nested), notes (dalam folder), tags (many-to-many dengan notes). Berikan model definitions dan query untuk: semua notes dengan tag tertentu, diurutkan berdasarkan modified date.

Pertanyaan Reflektif

Apakah aplikasi yang sedang kamu rencanakan butuh database SQL atau cukup key-value store? Data apa yang paling kompleks di aplikasimu?