schema
Catatan teknis seputar web development, DevOps, dan integrasi AI.
12 artikel
- 11.52frontend
Palet Kosong dari JSON yang Valid
Kunci backgroundColor dan pembaca yang mencari background-color, dua-duanya legal tapi tidak pernah bertemu. Palet kosong tanpa satu pun error.
TL;DR: Bug-nya sepele tapi siluman: capture nulis key JSON gaya camelCase, sedangkan consumer bacanya pakai kebab-case, jadi lookup-nya gagal total. Nilainya nggak error, cuma string kosong, makanya palette sama font tampil kosong padahal build sukses dan screenshot jelas berwarna. Solusinya satu arah: capture nulis kebab-case plus script validasi sebelum file ditulis.
#css#json#javascript - 14.15database
Tiga Lapis Kontrak, Satu Typo dari HTTP 500
Validasi aplikasi dan skema openapi menerima tipe baru, kolom ENUM MySQL menolaknya. Error 1265 baru terlihat saat INSERT.
TL;DR: Aplikasi mengalami error 1265 dari MySQL. Error ini disebabkan oleh perbedaan tipe data di tiga lapis yang berbeda. Perlu disinkronkan agar aplikasi berjalan lancar.
#mysql#schema#database-migration - 10.44database
Satu Tabel untuk Banyak Tipe Organisasi
Satu tabel organisasi dengan kolom nullable per tipe lebih murah dirawat daripada satu tabel per tipe, asal tiga konsekuensinya diterima sadar.
TL;DR: Saya membuat portal layanan publik. Tabel organizations memuat semua kolom yang dimiliki tipe mana pun. Saya pilih satu tabel generik dengan kolom tambahan nullable.
#mysql#database-schema#migration - 01.30database
Membalik Default Kolom: Saklar Perilaku untuk Baris Baru
Mengubah DEFAULT satu kolom tercatat instan dan hanya menyentuh metadata. Yang perlu disiapkan justru jalur-jalur INSERT yang tidak ikut berubah.
TL;DR: Jadi waktu itu fitur ulasan entitas baru nyala terus, padahal pengembangnya maunya mati dulu. Fixnya gampang banget: satu baris ALTER TABLE buat ubah default kolom rating_enabled jadi 0. Aman pas produksi karena cuma ubah metadata, data lama nggak disentuh, plus ada tes integrasi buat ngunci perilakunya.
#mysql#database-migration#schema - 20.10backend
Tiga Celah Mapper yang Hanya Terlihat di Data Asli
Fixture hijau bukan jaminan: nested object, camelCase, dan datetime penuh baru ketahuan saat 5330 baris asli masuk ke ingest.
TL;DR: Dump JSON 5330 baris masuk mulus tanpa error, tapi kolom nama perusahaan sama tanggalnya kosong semua, ternyata mapper salah asumsi bentuk data. Field penyedia ternyata objek bersarang, kuncinya camelCase, plus tanggalnya datetime penuh yang ditolak date.fromisoformat. Setelah dibenerin, semua baris kebaca dan idempotensi jalan, pelajarannya mulai dari data asli, bukan asumsi.
#python#data-engineering#schema - 18.57database
Satu Aturan, Satu Tempat: Identitas Email dalam Skema Basis Data
Dua constraint menjaga satu aturan identitas email. Menghapus yang redundan ternyata bukan kosmetik, melainkan menutup celah spesifikasi ganda.
TL;DR: Migrasi ini cuma ngehapus constraint komposit tenant-email dan ganti email jadi unique, intinya satu aturan mending ditulis sekali aja. Soalnya dua spesifikasi buat aturan yang sama itu bahaya—pas aturan berubah, yang lama bisa balik nyala diam-diam. Verifikasinya aman: roundtrip migrasi bersih, autogenerate nggak nemu drift, dan insert duplikat lintas tenant tetap ditolak database.
#postgresql#alembic#sqlalchemy - 14.53backend
Migrasi Down-First: Kolom Aditif dan FK yang Ditunda
Merancang migrasi MySQL dari arah baliknya: kolom aditif, down sebagai cermin, dan FK yang sengaja ditunda.
TL;DR: Nambah kolom di entities sama categories dibikin aditif aja biar migrasi aman dan rollback gampang. Foreign key type_id sengaja ditunda karena tabel masternya belum ada biar nggak trigger copy berat di MySQL. Kolom deleted_at dibikin TIMESTAMP NULL biar nggak kena magic timestamp dan down migration tinggal drop balik.
#mysql#golang#schema - 08.39backend
Build Hijau, Runtime Runtuh: Kontrak API yang Hanya di Kode
Nilai status baru di handler backend lolos build frontend karena spec OpenAPI tidak ikut diubah. Catatan kenapa kontrak API harus eksplisit di spec.
TL;DR: Gue nambah status tiket di backend kirain aman soalnya nggak ada error pas kompilasi, eh pas dibuka malah kacau. Usut punya usut ternyata tipe frontend cuma ngikutin openapi yaml jadi nilai baru itu nggak kebaca. Pelajarannya spec harus jadi patokan utama, tulis enum lengkap di sana baru regenerate biar compiler bisa negur.
#openapi#typescript#api - 07.57database
Ganti Kosakata Status Tanpa Sekali Jalan: ENUM Tiga Langkah
Enam status baru, empat status lama. MODIFY + UPDATE + MODIFY bikin kosakata status ganti tanpa copy tabel dan tanpa baris invalid di tengah jalan.
TL;DR: Spec butuh enam status baru tapi DB masih pakai empat status Inggris lama jadi nggak bisa asal ganti kolom. MySQL cuma boleh nambah ENUM di akhir biar in-place, kalau diselip di tengah malah copy tabel dan data bisa geser. Makanya migrasinya dibikin tiga step expand-migrate-contract, down-nya lossy dan relasi sengaja nggak pakai foreign key biar soft delete aman.
#mysql#migration#schema