Praktik terbaik hanya bernilai ketika bisa dijadikan daftar periksa, bukan prinsip abstrak. Chapter ini merangkum keputusan-keputusan yang sepanjang Course ini terbukti menentukan sehat-tidaknya sebuah database MySQL — dari kebiasaan penamaan sampai disiplin backup — dan menyajikannya sebagai audit yang bisa Anda jalankan terhadap proyek sendiri. Setiap butir merujuk kembali ke chapter yang membahas alasannya, karena praktik tanpa alasan cepat meluntur menjadi dogma.
Disiplin Skema dan Penamaan #
Skema yang sehat dimulai dari kebiasaan kecil yang konsisten. Daftar periksa berikut adalah standar minimum yang dipakai seluruh proyek di Section Proyek:
- Nama tabel dan kolom memakai
snake_caselowercase tanpa prefiks nama database —detail_pesanan, bukant_detail_pesanan_tbl. - Setiap tabel punya primary key eksplisit; kunci sintetis
AUTO_INCREMENTmenjadi default, natural key hanya bila benar-benar stabil dan unik. - Foreign key didefinisikan di database, bukan hanya di kepala programmer — dan diberi nama eksplisit (
fk_pesanan_pelanggan) agar pesan galat mudah dibaca. - Tipe data dipilih paling kecil yang cukup: uang selalu
DECIMAL, status bernilai tetap jadiENUM, teks panjangTEXT, danutf8mb4untuk semua string. - Kolom waktu memakai
DATETIMEuntuk kejadian lokal danTIMESTAMPbila zona waktu perlu dikonversi otomatis.
Audit cepatnya satu query — tabel tanpa primary key terlihat langsung dari information_schema, dan keberadaan foreign key bisa dicek per tabel. Skema yang lolos lima butir di atas akan menolak data salah sebelum aplikasi sempat membuatnya.
Kebiasaan Query yang Sehat #
Di sisi query, lima kebiasaan ini memisahkan kode yang mudah hidup bertahun-tahun dari kode yang jadi sumber bug laten:
- Selalu
ORDER BYuntuk hasil multi-baris — urutan tanpaORDER BYtidak dijamin MySQL 8, dan query yang mengandalkannya rusak diam-diam saat data bertambah. - Uang tidak pernah lewat
FLOAT— pembulatan biner menghasilkan selisih sen yang menumpuk di laporan;DECIMAL(10,2)adalah satu-satunya rumah yang benar. UPDATEdanDELETEselalu denganWHERE— dan sebelum menjalankan versi berat, jalankan duluSELECTdenganWHEREyang sama untuk melihat korban.- Kolom di-hitung tidak dipercaya tanpa
COALESCE—SUMatas nol baris menghasilkanNULL, bukan nol, dan laporan yang tidak siap untuk itu menampilkan sel kosong yang membingungkan. - Subquery berkorelasi di tabel besar diperiksa ulang — pola yang indah di data kecil bisa menjadi beban O(n²) di jutaan baris; bandingkan dengan versi join atau window.
Keamanan dan Aplikasi #
Lapisan keamanan yang sehat bertumpuk: akun aplikasi dengan privilege minimum (SELECT, INSERT, UPDATE, DELETE di satu database — tanpa DROP), prepared statement untuk semua input pengguna, password yang lolos kebijakan kuat, koneksi terenkripsi di jaringan terbuka, dan variabel berisiko (local_infile, secure_file_priv) dalam keadaan ditinjau. Prinsip tunggalnya: satu lapisan boleh gagal tanpa membocorkan segalanya. Daftar periksa lengkapnya ada di Secure Database Configuration
, dan pola prepared statement per bahasa di Prepared Statements dalam Aplikasi
.
Pemeliharaan Berkala #
Database yang hidup butuh perawatan berulang. Ritme berikut adalah titik awal yang wajar untuk aplikasi menengah:
| Aktivitas | Frekuensi | Alat |
|---|---|---|
| Backup full + uji restore | Mingguan + drill kuartalan | mysqldump + drill |
| Tinjau slow query log | Mingguan | Slow Query Log |
| Audit index tak terpakai | Bulanan | SHOW INDEX + EXPLAIN |
| Audit user dan privilege | Kuartalan | SHOW GRANTS + Least Privilege |
ANALYZE TABLE tabel sibuk | Sesudah lonjakan penulisan besar | Pemeliharaan Database |
Ketika Performa Menjadi Masalah #
Urutan diagnosis performa yang sehat selalu dari bukti ke dugaan: identifikasi query lambat lewat slow log, baca rencana eksekusinya dengan EXPLAIN, baru hipotesis — kurang index? fungsi pada kolom? join tanpa kunci? — lalu perbaiki satu hal dan ukur ulang. Pola penyakit paling umum beserta obatnya sudah dipetakan di Query yang Lambat
; disiplinnya adalah menolak mengoptimalkan sebelum membaca execution plan, karena intuisi tentang letak kemacetan sering salah.
Referensi #
- Optimization — MySQL 8.4 Reference Manual
- Backup Policy — MySQL 8.4 Reference Manual
- Security — MySQL 8.4 Reference Manual
Daftar periksa ini menutup siklus belajar: dari sintaks, desain, sampai operasi harian. Chapter berikutnya menyiapkan Anda untuk momen ketika semuanya berjalan salah — kumpulan galat paling umum beserta pola pemecahannya.