stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-07
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 7: Normalisasi data hingga 3NF dan BCNF
Program Studi Bisnis Digital • FEB UNDIP

Sistem Database

Pertemuan 7 — Normalisasi Data hingga 3NF dan BCNF

Mengapa tabel yang "asal jadi" berbahaya, dan bagaimana 1NF → 2NF → 3NF → BCNF menyembuhkannya langkah demi langkah.

RPS MINGGU 7 • 2×50 MENIT

Tujuan Pembelajaran Hari Ini

Setelah pertemuan ini, Anda mampu mengenali tabel bermasalah dan merapikannya melalui normalisasi hingga tingkat 3NF/BCNF. Secara rinci:

KONSEP
FD
Dependensi fungsional
Memahami apa itu functional dependency (FD) — aturan "kolom A menentukan kolom B" — sebagai dasar seluruh proses normalisasi.
PRAKTIK
1–3NF
+ BCNF
Mampu menguji sebuah tabel terhadap syarat 1NF, 2NF, 3NF, dan BCNF, lalu memecahnya (dekomposisi) bila syarat belum terpenuhi.
Bagian 1 dari 4
Kenapa Tabel Bisa "Sakit"?
Anomali data: insert, update, dan delete yang bermasalah pada tabel yang dirancang asal-asalan.

Apa Itu Normalisasi?

Normalisasi adalah proses bertahap memecah satu tabel besar yang berantakan menjadi beberapa tabel kecil yang rapi, berdasarkan aturan matematis, agar data tidak mengandung redundansi (pengulangan) yang berbahaya.

Analogi: normalisasi seperti merapikan lemari pakaian — baju, celana, dan aksesori dipisah ke laci masing-masing, bukan ditumpuk jadi satu, supaya mudah dicari dan tidak rusak karena tertindih.
Redundansi tinggi → Risiko Anomali Tinggi → Normalisasi → Redundansi Terkendali

Studi Kasus: Tabel Pesanan Toko Online "Anisa"

Perhatikan tabel Pesanan berikut — semua data digabung jadi satu tabel besar tanpa dipecah.

ID_PesanNama_PelangganKotaKode_ProdukNama_ProdukHarga
P001Budi SantosoSemarangK01Kemeja Batik150.000
P001Budi SantosoSemarangK02Celana Bahan120.000
P002Sari WulandariSoloK01Kemeja Batik150.000
Perhatikan: nama & kota Budi terulang dua kali, dan harga produk K01 juga terulang. Ini benih anomali.

Tiga Jenis Anomali Data

INSERT
Sisip
Tidak bisa menambah produk baru (mis. "Sarung Tenun") sebelum ada pesanan yang memakainya — karena kode produk "menempel" pada baris pesanan.
UPDATE
Ubah
Kalau harga Kemeja Batik naik jadi 160 ribu, Anda harus mengubah setiap baris yang memuat K01 — lupa satu baris, data jadi tidak konsisten.
DELETE
Hapus
Kalau pesanan P002 dibatalkan dan dihapus, data pelanggan Sari Wulandari ikut lenyap — padahal Sari mungkin masih pelanggan aktif.
Bagian 2 dari 4
Dependensi Fungsional
Bahasa dasar normalisasi: bagaimana satu kolom "menentukan" nilai kolom lain.

Dependensi Fungsional (Functional Dependency)

Notasi A → B dibaca "A menentukan B": jika dua baris punya nilai A yang sama, maka nilai B-nya pasti sama juga.

Kode_Produk → Nama_Produk, Harga
Contoh sehari-hari: NIM → Nama_Mahasiswa. Kalau dua baris punya NIM yang sama, nama mahasiswanya pasti sama — satu NIM hanya untuk satu orang.

FD Penuh vs FD Parsial

Konsep ini penting khusus untuk tabel dengan kunci komposit (primary key gabungan ≥2 kolom).

FD PENUH (FULL FD)

Atribut bergantung pada seluruh kunci komposit, bukan sebagian.

{ID_Pesan, Kode_Produk} → Jumlah_Beli
FD PARSIAL

Atribut bergantung hanya pada sebagian kunci komposit.

{ID_Pesan, Kode_Produk} → Nama_Produk
(cukup Kode_Produk saja)
Bagian 3 dari 4
Naik Tingkat: 1NF → 2NF → 3NF
Tiga langkah bertahap merapikan tabel Pesanan toko Anisa, satu syarat per tingkat.

Tingkat 1: 1NF (First Normal Form)

Syarat 1NF: setiap sel hanya berisi satu nilai atomik (tidak boleh ada nilai berulang/list dalam satu sel), dan tidak ada tabel bersarang.

MELANGGAR 1NF
ID_PesanKode_Produk
P001K01, K02
SUDAH 1NF
ID_PesanKode_Produk
P001K01
P001K02

Tingkat 2: 2NF (Second Normal Form)

Syarat 2NF: sudah 1NF, DAN tidak ada FD parsial — setiap atribut non-kunci harus bergantung penuh pada seluruh kunci komposit.

Tabel Pesanan (kunci: {ID_Pesan, Kode_Produk}) melanggar 2NF: Nama_Produk & Harga hanya bergantung pada Kode_Produk (FD parsial).
Dekomposisi → Pesanan_Detail{ID_Pesan, Kode_Produk, Jumlah} + Produk{Kode_Produk, Nama_Produk, Harga}

Tingkat 3: 3NF (Third Normal Form)

Syarat 3NF: sudah 2NF, DAN tidak ada dependensi transitif — atribut non-kunci tidak boleh bergantung pada atribut non-kunci lain.

Kasus: tabel Produk{Kode_Produk, Nama_Produk, Kategori, Diskon_Kategori}. Diskon_Kategori bergantung pada Kategori, bukan langsung pada Kode_Produk — dependensi transitif.
Kode_Produk → Kategori → Diskon_Kategori (transitif, harus dipecah)

Hitung dari Nol: Menguji Tingkat Normalisasi Tabel Mahasiswa

Tabel Nilai{NIM, Kode_MK, Nama_MK, SKS, Nilai_Huruf}, kunci komposit {NIM, Kode_MK}. FD: NIM→— (tak ada, non-kunci), Kode_MK → Nama_MK, SKS.

LangkahPerhitungan (uji syarat)Nilai
1. Cek 1NFSemua sel atomik? Ya, tidak ada list dalam sel
LULUS 1NF
2. Cek FD parsialNama_MK & SKS hanya butuh Kode_MK, bukan {NIM, Kode_MK} penuh
GAGAL 2NF
3. DekomposisiPisah jadi Ambil_MK{NIM,Kode_MK,Nilai_Huruf} + MataKuliah{Kode_MK,Nama_MK,SKS}
2 TABEL
4. Cek transitifDi tiap tabel baru, tak ada non-kunci → non-kunci lain
LULUS 3NF
Bagian 4 dari 4
BCNF & Kapan Berhenti Menormalisasi
Bentuk normal yang lebih ketat dari 3NF, plus trade-off praktis normalisasi vs performa.

BCNF (Boyce-Codd Normal Form)

Syarat BCNF: sudah 3NF, DAN untuk setiap FD X → Y yang berlaku, X harus superkey (penentu di kiri panah selalu kandidat kunci).

3NF punya sedikit "pengecualian" untuk atribut kunci; BCNF tidak memberi pengecualian sama sekali — lebih ketat.
Kasus langka: tabel Kursus_Dosen{Mahasiswa, Kursus, Dosen} dengan FD Dosen → Kursus (1 dosen ajar 1 kursus). Dosen bukan superkey → melanggar BCNF meski sudah 3NF.

Hitung dari Nol: Menguji BCNF pada Tabel Reservasi Ruang Rapat

Tabel Reservasi{Ruang, Waktu, PenanggungJawab}. FD1: {Ruang,Waktu}→PJ. FD2: PenanggungJawab→Ruang (1 PJ hanya pegang 1 ruang tetap).

LangkahPerhitungan (uji BCNF)Nilai
1. Kandidat kunci{Ruang,Waktu} menentukan semua atribut → kandidat kunci utama
{Ruang,Waktu}
2. Cek FD2PenanggungJawab → Ruang: apakah PenanggungJawab superkey?
BUKAN
3. SimpulkanAda FD dgn penentu bukan superkey → melanggar BCNF
GAGAL BCNF
4. DekomposisiPisah: PJ_Ruang{PenanggungJawab,Ruang} + Jadwal{PenanggungJawab,Waktu}
2 TABEL BCNF

Coba Sendiri: Naikkan Tabel Bertahap dari 1NF ke BCNF

Masukkan dependensi fungsional tabel Anda sendiri, lalu klik langkah demi langkah untuk melihat proses dekomposisi 1NF hingga BCNF.

Ringkasan: Tangga Normalisasi

TingkatSyarat TambahanMenghilangkan
1NFNilai atomik, tanpa sel berulangStruktur tabel tak-rata
2NF1NF + tanpa FD parsialAnomali dari kunci komposit
3NF2NF + tanpa dependensi transitifAnomali dari atribut non-kunci
BCNF3NF + setiap penentu FD adalah superkeyKasus tersisa yang lolos 3NF
Aturan praktis: kebanyakan tabel bisnis sehari-hari cukup berhenti di 3NF. BCNF dibutuhkan untuk kasus FD tumpang tindih yang lebih jarang.

Trade-off: Normalisasi vs Performa Query

NORMALISASI PENUH
  • Data konsisten, minim redundansi
  • Update aman & murah
  • Butuh banyak JOIN saat query laporan
DENORMALISASI (SENGAJA)
  • Query laporan lebih cepat (sedikit JOIN)
  • Cocok untuk dashboard/analitik read-heavy
  • Risiko: update jadi lebih mahal & berisiko

Latihan Kelas & Persiapan Minggu Depan

LATIHAN (KERJAKAN BERPASANGAN)

Tabel Karyawan{ID_Karyawan, Nama, Kode_Divisi, Nama_Divisi, Gaji_Pokok}.

  • Identifikasi semua FD yang berlaku
  • Uji tingkat 1NF, 2NF, 3NF
  • Dekomposisikan bila ada pelanggaran
MINGGU DEPAN — P8 (UTS DI MINGGU 8 RPS)
Constraint
Primary key & foreign key sebagai penegak integritas skema yang sudah Anda normalisasi hari ini.