Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi
Tentukan pilihan antara kolom JSONB dan tabel terpisah — atribut fleksibel dibandingkan skema ketat
Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi adalah pelajaran SQL Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar SQL Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus SQL Academy mencakup 4 pelajaran total.
Pilihan
Untuk setiap bagian data yang mungkin Anda simpan: kolom atau kunci JSONB? Jawabannya memengaruhi desain skema, kinerja kueri, dan kemudahan pemeliharaan.
Kapan Kolom Lebih Unggul
Gunakan kolom nyata ketika data:
- Diketahui dan stabil
- Sering dikuerikan dengan indeks
- Divalidasi oleh kendala CHECK / FK
- Digunakan dalam laporan atau penggabungan
Kapan JSONB Lebih Unggul
Gunakan JSONB ketika:
- Bentuknya berbeda untuk setiap baris (bidang yang ditentukan penyewa, metadata pengaya)
- Skema berkembang dengan cepat (hindari migrasi)
- Pembacaan / penulisan seluruh dokumen merupakan hal yang umum
- Menyimpan muatan data buram (isi webhook)
Pola Hibrida
Dapatkan keunggulan keduanya: kolom terstruktur untuk inti yang stabil dan JSONB untuk bagian tambahan yang bervariasi:
CREATE TABLE events (
id BIGSERIAL PRIMARY KEY,
ts TIMESTAMPTZ NOT NULL,
event_type TEXT NOT NULL,
user_id BIGINT,
data JSONB NOT NULL DEFAULT '{}'::JSONB
);Jebakan EAV
Model klasik “entity-attribute-value” — satu tabel dengan baris berisi (kunci, nilai) — dahulu merupakan satu-satunya pilihan untuk data yang jarang. JSONB menggantikan EAV dengan satu kolom dokumen:
-- Old EAV:
CREATE TABLE user_attrs (
user_id BIGINT,
attr TEXT,
val TEXT
);
-- Modern:
ALTER TABLE users ADD COLUMN attrs JSONB NOT NULL DEFAULT '{}';
-- JSONB queries are faster and easier than the EAV joins.Strategi Migrasi
Menambahkan kolom ke tabel yang sering digunakan → waktu henti selama 5 menit pada tabel besar. Dengan JSONB, menambahkan bidang cukup dilakukan dengan mengubah kode aplikasi.
Kendala pada JSONB
Tambahkan kendala CHECK untuk menegakkan struktur minimum:
ALTER TABLE events
ADD CONSTRAINT data_has_type CHECK (data ? 'type'),
ADD CONSTRAINT type_is_string CHECK (jsonb_typeof(data->'type') = 'string');Promosikan Bidang yang Sering Digunakan
Jika bidang JSONB sering dikuerikan, promosikan bidang tersebut menjadi kolom nyata. Skrip UPDATE + indeks baru + kolom baru membuatnya cepat.
Operasi Patch JSONB
Perbarui satu bidang:
UPDATE users
SET attrs = jsonb_set(attrs, '{plan}', '"pro"')
WHERE id = 1;Jangan Simpan Uang dalam JSONB
Nilai keuangan memerlukan tipe NUMERIC yang presisi dan kendala. Selalu gunakan kolom nyata.
Kapan JSONB Merugikan
Jika Anda mendapati diri mengekstrak dan mengonversi kunci JSONB yang sama dalam setiap kueri, itu tanda bahwa kunci tersebut seharusnya menjadi kolom. Biaya kumulatif (data->>'k')::INT pada jutaan baris akan menjadi besar.
Dokumentasi Skema
Kolom JSONB mudah ditulis tetapi sulit didokumentasikan. Pelihara skema eksternal (JSON Schema, kode aplikasi) agar rekan kerja mengetahui hal yang diharapkan.
Ringkasan
JSONB adalah alat yang kuat — gunakan untuk bagian yang bervariasi dan gunakan kolom nyata untuk inti yang stabil. Promosikan bidang yang sering digunakan ketika polanya mulai terlihat.
Pemeriksaan Singkat
Anda menyimpan peristiwa audit. Jenis peristiwa selalu ada; beberapa peristiwa memiliki array "actors" yang bentuknya beragam. Bagaimana Anda memodelkannya?
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi” gratis?
Ya — teks lengkap “Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus SQL Academy, upgrade ke CoddyKit PRO. Kursus SQL Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi”?
Tentukan pilihan antara kolom JSONB dan tabel terpisah — atribut fleksibel dibandingkan skema ketat Kamu berlatih SQL Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai SQL Academy?
Tidak diperlukan pengalaman sebelumnya. SQL Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran SQL Academy ini?
Ya. Setiap pelajaran SQL Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- JSONB vs JSON: Kapan Menggunakan Masing-Masing
- Operator Jalur: -> ->> @>
- Mengindeks JSONB dengan GIN
- Pemodelan: Kapan JSONB Lebih Unggul daripada Normalisasi