MODUL PERTEMUAN 7
NORMALISASI LANJUTAN & EVALUASI MODEL DATA
A. INFORMASI UMUM MATA KULIAH
| Item | Keterangan |
|---|---|
| Mata Kuliah | Data Modelling |
| Kode MK | SSD1019 |
| Bobot | 3 SKS (Praktikum) |
| Semester | 4 (Empat) |
| Program Studi | Sains Data |
| Fakultas | Ekonomi dan Bisnis Islam |
| Universitas | UIN K.H. Abdurrahman Wahid Pekalongan |
| Dosen Pengampu | Mohammad Reza Maulana, M.Kom |
B. INFORMASI PERTEMUAN
B.1 Sub-CPMK Pertemuan 7
Sub-CPMK 4.1: Mahasiswa mampu menyusun dan memvalidasi model data logikal secara komprehensif, termasuk menerapkan BCNF, memahami kapan dan bagaimana menerapkan denormalisasi terkontrol, serta mengevaluasi kualitas logical data model menggunakan checklist validasi yang terstruktur.
Sub-CPMK 6.1: Mahasiswa mampu mengintegrasikan seluruh komponen model data (konseptual, logikal) dalam satu rancangan yang kohesif, siap untuk direview secara peer dan dikembangkan lebih lanjut ke tahap implementasi fisik.
B.2 Tujuan Pembelajaran (Learning Objectives)
Setelah mengikuti pertemuan ini, mahasiswa akan mampu:
- Menjelaskan perbedaan antara 3NF dan BCNF serta mengidentifikasi situasi di mana 3NF tidak cukup (C2 â Memahami)
- Menerapkan dekomposisi BCNF pada relasi yang melanggar BCNF meski sudah 3NF (C3 â Mengaplikasikan)
- Menganalisis trade-off antara normalisasi penuh dan denormalisasi terkontrol dari perspektif performa dan integritas (C4 â Menganalisis)
- Menentukan kapan denormalisasi menjadi keputusan desain yang sah dan terdokumentasi (C4 â Menganalisis)
- Mengevaluasi sebuah logical data model menggunakan checklist validasi komprehensif (C5 â Mengevaluasi)
- Memberikan umpan balik konstruktif terhadap model data rekan sejawat dalam sesi peer review (C5 â Mengevaluasi)
B.3 Kompetensi yang Dikembangkan
| Domain | Kompetensi |
|---|---|
| Kognitif | Memahami BCNF (C2), Menerapkan dekomposisi (C3), Menganalisis trade-off (C4), Mengevaluasi model (C5) |
| Afektif | Mengembangkan kemampuan berpikir kritis terhadap desain; menghargai proses review dan umpan balik; terbuka terhadap kritik konstruktif |
| Psikomotorik | Menggunakan checklist validasi secara sistematis; mendokumentasikan keputusan denormalisasi; melakukan peer review terstruktur |
B.4 Indikator Pencapaian
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:
- Membedakan kasus di mana 3NF sudah cukup vs. kasus yang membutuhkan BCNF
- Mendekomposisi relasi yang melanggar BCNF dengan tetap menjaga sifat lossless-join
- Mengidentifikasi minimal 3 situasi nyata di industri di mana denormalisasi terkontrol dibenarkan
- Menyelesaikan validasi penuh terhadap logical model menggunakan checklist yang diberikan
- Menghasilkan laporan peer review tertulis yang memuat temuan, saran perbaikan, dan justifikasi
B.5 Alokasi Waktu
| No | Kegiatan | Durasi | Keterangan |
|---|---|---|---|
| 1 | Pembukaan & Review Tugas Normalisasi Pertemuan 6 | 10 menit | Diskusi temuan umum dari tugas mahasiswa |
| 2 | Aktivitas Pemantik: "Ketika 3NF Belum Cukup" | 10 menit | Kasus nyata yang gagal meski sudah 3NF |
| 3 | Materi 1: Boyce-Codd Normal Form (BCNF) | 25 menit | Definisi, perbedaan dengan 3NF, dekomposisi |
| 4 | Materi 2: Trade-off Normalisasi vs Performa | 20 menit | Ceramah + diskusi kasus industri |
| 5 | Break | 10 menit | â |
| 6 | Materi 3: Denormalisasi Terkontrol | 15 menit | Teknik dan cara mendokumentasikan |
| 7 | Materi 4: Validasi Logical Data Model | 20 menit | Ceramah + demonstrasi checklist |
| 8 | Sesi Peer Review Model Data Proyek | 25 menit | Tukar model, review berpasangan/kelompok kecil |
| 9 | Presentasi Singkat Temuan Peer Review | 10 menit | 2-3 mahasiswa presentasikan temuan |
| 10 | Ringkasan Materi Pertemuan 1â7 & Persiapan UTS | 10 menit | Peta konsep, kisi-kisi UTS, tips belajar |
| 11 | Penutup & Motivasi Menjelang UTS | 5 menit | Motivasi, pengumuman |
| Total | 160 menit | (termasuk fleksibilitas 10 menit) |
C. MATERI PEMBELAJARAN
C.1 Aktivitas Pemantik â "Ketika 3NF Belum Cukup"
Instruksi (10 menit): Dosen menampilkan relasi berikut dan meminta mahasiswa untuk memverifikasi apakah relasi tersebut sudah 3NF â kemudian mengamati apakah masih ada masalah yang tersembunyi.
Relasi: JADWAL_MENGAJAR
JADWAL_MENGAJAR(nama_dosen, mata_kuliah, ruangan)
Contoh Data:
| nama_dosen | mata_kuliah | ruangan |
|--------------|-----------------|---------|
| Prof. Ahmad | Data Modelling | R201 |
| Prof. Ahmad | Machine Learning| R305 |
| Dr. Budi | Data Modelling | R201 |
| Dr. Citra | Machine Learning| R102 |
| Dr. Citra | Data Modelling | R305 |
Business Rules yang Berlaku:
BR1: Satu mata kuliah di satu ruangan hanya diajarkan oleh satu dosen
(satu slot ruangan-matkul = satu dosen)
BR2: Satu dosen hanya mengajar satu mata kuliah di satu ruangan
(satu slot dosen-matkul = satu ruangan)
BR3: Satu dosen bisa mengajar banyak mata kuliah
BR4: Satu mata kuliah bisa diajarkan di banyak ruangan oleh dosen berbedaPertanyaan Pemantik:
- Tentukan PK dari relasi ini! Apakah
{nama_dosen, mata_kuliah}cukup sebagai PK? - Tuliskan semua Functional Dependency yang berlaku!
- Apakah relasi ini sudah 1NF? 2NF? 3NF? Verifikasi!
- Meski sudah 3NF, coba masukkan data baru: "Prof. Ahmad mengajar Machine Learning di R102". Apa yang terjadi dengan data lama?
Poin Pembelajaran: "Ternyata relasi yang sudah memenuhi syarat 3NF pun masih bisa menyimpan anomali â terutama ketika ada lebih dari satu candidate key yang saling overlapping. Inilah yang memotivasi BCNF."
C.2 Materi 1: Boyce-Codd Normal Form (BCNF)
C.2.1 Mengapa 3NF Saja Tidak Selalu Cukup?
Dari aktivitas pemantik, kita menemukan bahwa relasi JADWAL_MENGAJAR sudah 3NF tetapi masih mengandung anomali. Mari kita analisis lebih dalam mengapa ini bisa terjadi.
ANALISIS JADWAL_MENGAJAR:
Candidate Keys yang ada:
CK1: {nama_dosen, mata_kuliah}
â Karena satu dosen mengajar satu MK di tepat satu ruangan (BR2)
CK2: {mata_kuliah, ruangan}
â Karena satu ruangan untuk satu MK hanya diisi satu dosen (BR1)
Functional Dependencies:
F1: {nama_dosen, mata_kuliah} â ruangan (dari CK1)
F2: {mata_kuliah, ruangan} â nama_dosen (dari CK2)
F3: ruangan â ???
CEK 3NF:
Apakah ada transitive dependency?
Semua non-key attribute bergantung langsung pada salah satu candidate key.
â Tidak ada transitive dependency â SUDAH 3NF â
TAPI MASIH ADA MASALAH:
Perhatikan FD: ruangan â mata_kuliah
(Benarkah? Cek data: R201 â Data Modelling, R305 â ?)
Dari data: R305 digunakan untuk Machine Learning (Prof. Ahmad)
DAN Data Modelling (Dr. Citra)
â Ternyata ruangan TIDAK menentukan mata_kuliah secara tunggal.
Yang benar: {mata_kuliah, ruangan} â nama_dosen (ini CK2)
Sekarang cek: apakah ADA determinant yang BUKAN candidate key?
Dalam FD F1: {nama_dosen, mata_kuliah} â ruangan
Determinant: {nama_dosen, mata_kuliah} â INI adalah CK1 â
Dalam FD F2: {mata_kuliah, ruangan} â nama_dosen
Determinant: {mata_kuliah, ruangan} â INI adalah CK2 â
Hmm, semua determinant adalah candidate key...
TUNGGU! Kita perlu melihat lebih cermat pada kasus di mana
ada FD yang determinant-nya bukan candidate key!Contoh Kasus BCNF yang Lebih Jelas:
RELASI: TUTOR_MAHASISWA(mahasiswa_id, mata_kuliah, tutor_id)
Business Rules:
BR1: Setiap mahasiswa punya satu tutor per mata kuliah
â {mahasiswa_id, mata_kuliah} â tutor_id
BR2: Setiap tutor hanya mengampu satu mata kuliah
â tutor_id â mata_kuliah
Contoh Data:
| mahasiswa_id | mata_kuliah | tutor_id |
|--------------|-----------------|----------|
| M001 | Data Modelling | T01 |
| M001 | Machine Learning| T03 |
| M002 | Data Modelling | T02 |
| M002 | Machine Learning| T03 |
| M003 | Data Modelling | T01 |
Candidate Key: {mahasiswa_id, mata_kuliah}
(satu mahasiswa, satu MK â satu tutor)
Semua FD:
F1: {mahasiswa_id, mata_kuliah} â tutor_id â dari CK
F2: tutor_id â mata_kuliah â !!!
CEK 3NF:
Apakah ada transitive dependency?
mahasiswa_id â ??? â mata_kuliah ... tidak ada rantai transitif yang melanggar.
mata_kuliah bergantung pada tutor_id, dan tutor_id bukanlah non-key biasa...
Dalam 3NF, pelanggaran terjadi jika: non-key â non-key
tutor_id bukan PK, tapi apakah dia bisa jadi candidate key?
Tidak! {tutor_id} saja tidak cukup mengidentifikasi satu baris (satu tutor
bisa melayani banyak mahasiswa).
Tapi tunggu: 3NF membolehkan X â Y jika Y adalah bagian dari candidate key.
mata_kuliah adalah bagian dari CK {mahasiswa_id, mata_kuliah}.
tutor_id â mata_kuliah: Y (mata_kuliah) adalah bagian dari CK â 3NF BOLEH ini!
â Relasi SUDAH 3NF tetapi...
MASALAH ANOMALI yang tersisa:
Update Anomaly: Jika T01 beralih mengampu ML alih-alih DM,
harus update banyak baris.
Insertion Anomaly: Tidak bisa mendaftarkan tutor baru (T04 mengampu Statistics)
sebelum ada mahasiswa yang ditugaskan padanya.
Deletion Anomaly: Hapus M003 â informasi bahwa T01 mengampu DM bisa hilang.
AKAR MASALAH: tutor_id â mata_kuliah
tutor_id adalah determinant, tapi BUKAN candidate key!
Inilah yang dilanggar oleh BCNF.C.2.2 Definisi Formal BCNF
DEFINISI BCNF:
Sebuah relasi R berada dalam Boyce-Codd Normal Form (BCNF) jika dan hanya jika:
Untuk SETIAP Functional Dependency X â Y yang non-trivial dalam R,
X HARUS merupakan SUPERKEY dari R.
Dimana:
- Non-trivial FD: Y bukan subset dari X (bukan FD "tautologi")
- Superkey: atribut atau kumpulan atribut yang mengidentifikasi setiap baris secara unik
(termasuk candidate key dan superset dari candidate key)
PERBEDAAN BCNF vs 3NF:
3NF memperbolehkan X â Y jika:
(a) X adalah superkey, ATAU
(b) Y adalah bagian dari candidate key (prime attribute)
BCNF HANYA memperbolehkan X â Y jika:
(a) X adalah superkey
â BCNF lebih ketat: tidak ada pengecualian untuk prime attribute!
CARA CEK BCNF:
Untuk setiap FD non-trivial X â Y:
Tanyakan: "Apakah X adalah superkey (mengidentifikasi setiap baris unik)?"
YA â FD ini tidak melanggar BCNF â
TIDAK â FD ini MELANGGAR BCNF â
IDENTIFIKASI CEPAT:
Jika ada atribut yang bisa menjadi determinant (kiri FD)
tetapi BUKAN candidate key â PASTI melanggar BCNF!C.2.3 Perbandingan 3NF dan BCNF
| Aspek | 3NF | BCNF |
|---|---|---|
| Syarat | Tidak ada transitive dep. pada PK + boleh prime attribute menjadi dependen | Setiap determinant harus superkey |
| Kekuatan | Lebih longgar | Lebih ketat |
| Bebas anomali? | Sebagian besar, tapi tidak semua | Ya, untuk FD-based anomali |
| Lossless Decomposition | Selalu bisa dicapai | Selalu bisa dicapai |
| Dependency Preservation | Selalu bisa dicapai | Tidak selalu bisa dicapai |
| Kapan memilih 3NF? | Ketika dependency preservation lebih penting | â |
| Kapan memilih BCNF? | â | Ketika menghilangkan semua anomali lebih prioritas |
Catatan Penting: BCNF bisa membuat beberapa FD "hilang" (tidak ter-representasikan dalam satu tabel). Ini adalah trade-off yang harus diterima. Di praktik industri, 3NF sering menjadi standar minimum yang cukup karena menjamin dependency preservation.
C.2.4 Algoritma Dekomposisi BCNF
ALGORITMA DEKOMPOSISI BCNF:
INPUT: Relasi R dengan himpunan FD F
OUTPUT: Kumpulan relasi yang memenuhi BCNF
LANGKAH:
1. Jika R sudah BCNF â selesai (kembalikan {R})
2. Temukan FD X â Y yang melanggar BCNF
(X bukan superkey, Y tidak subset X)
3. Buat dua relasi baru:
R1 = skema dari X âĒ Y (dengan X sebagai PK)
R2 = R - Y (hapus Y dari R, tapi X tetap ada sebagai FK)
4. Rekursif: cek apakah R1 dan R2 sudah BCNF
Jika belum, ulangi langkah 2-3 pada relasi yang belum BCNF
PROPERTI YANG DIJAGA:
- Lossless-join: R = R1 â R2 (bisa di-JOIN kembali tanpa kehilangan data)
- Completeness: semua data asli tersimpan di salah satu tabel hasil
PROPERTI YANG MUNGKIN HILANG:
- Dependency preservation: beberapa FD mungkin tidak bisa di-enforce
hanya dengan constraint di satu tabel (butuh trigger atau application logic)C.2.5 Contoh Dekomposisi BCNF â TUTOR_MAHASISWA
RELASI AWAL: TUTOR_MAHASISWA(mahasiswa_id, mata_kuliah, tutor_id)
PK: {mahasiswa_id, mata_kuliah}
FD yang Melanggar BCNF:
tutor_id â mata_kuliah
(tutor_id BUKAN superkey karena satu tutor bisa melayani banyak mahasiswa)
DEKOMPOSISI:
LANGKAH 1: Identifikasi FD yang melanggar
X = tutor_id
Y = mata_kuliah
LANGKAH 2: Buat R1 dari X âĒ Y
R1 = TUTOR(tutor_id, mata_kuliah)
^^^^^^^^^
PK: tutor_id
FD yang di-capture: tutor_id â mata_kuliah â
LANGKAH 3: Buat R2 = R - Y (hapus mata_kuliah dari R, tutor_id tetap ada)
R2 = TUTOR_MAHASISWA_BARU(mahasiswa_id, tutor_id)
^^^^^^^^^^^^
PK: {mahasiswa_id, tutor_id}
Atau bisa juga: mahasiswa_id sebagai PK tunggal
jika satu mahasiswa hanya punya satu tutor?
â Tergantung business rule!
Asumsi: satu mahasiswa bisa punya banyak tutor (untuk MK berbeda)
PK: {mahasiswa_id, tutor_id}
VERIFIKASI BCNF:
R1 = TUTOR(tutor_id, mata_kuliah)
FD: tutor_id â mata_kuliah
Apakah tutor_id adalah superkey? YA (PK tunggal) â BCNF â
R2 = TUTOR_MAHASISWA_BARU(mahasiswa_id, tutor_id)
FD: {mahasiswa_id, tutor_id} â (tidak ada atribut lain) â BCNF â
HASIL AKHIR (BCNF):
TUTOR(tutor_id, mata_kuliah)
^^^^^^^^^
TUTOR_MAHASISWA(mahasiswa_id, tutor_id*)
^^^^^^^^^^^^ ^^^^^^^^
PK FK â TUTOR
DATA LAMA DALAM SKEMA BARU:
TUTOR:
| tutor_id | mata_kuliah |
|----------|-----------------|
| T01 | Data Modelling |
| T02 | Data Modelling |
| T03 | Machine Learning|
TUTOR_MAHASISWA:
| mahasiswa_id | tutor_id |
|--------------|----------|
| M001 | T01 |
| M001 | T03 |
| M002 | T02 |
| M002 | T03 |
| M003 | T01 |
QUERY untuk tahu mahasiswa mengikuti MK apa:
SELECT tm.mahasiswa_id, t.mata_kuliah, tm.tutor_id
FROM TUTOR_MAHASISWA tm
JOIN TUTOR t ON tm.tutor_id = t.tutor_id;
VERIFIKASI ANOMALI (setelah BCNF):
Update Anomaly: T01 beralih ke ML â update 1 baris di TUTOR â
Insertion Anomaly: Tutor baru T04 (Statistics) â insert ke TUTOR â
Deletion Anomaly: Hapus M003 â T01 tetap ada di TUTOR âC.2.6 Contoh BCNF â JADWAL_MENGAJAR (dari Pemantik)
KEMBALI KE RELASI PEMANTIK:
JADWAL_MENGAJAR(nama_dosen, mata_kuliah, ruangan)
Candidate Keys:
CK1: {nama_dosen, mata_kuliah}
CK2: {mata_kuliah, ruangan}
FD:
F1: {nama_dosen, mata_kuliah} â ruangan â CK1 adalah superkey â OK â
F2: {mata_kuliah, ruangan} â nama_dosen â CK2 adalah superkey â OK â
CEK BCNF:
Semua FD memiliki determinant yang merupakan superkey!
â Relasi SUDAH BCNF â
KESIMPULAN: JADWAL_MENGAJAR tidak melanggar BCNF.
Anomali yang kita temukan di pemantik (update kelas) bukan berasal dari
pelanggaran BCNF â itu adalah konsekuensi dari overlapping candidate keys
yang merupakan sifat alami dari domain ini.
PELAJARAN: Tidak semua "masalah" dalam relasi adalah pelanggaran normal form.
Terkadang anomali adalah refleksi dari kompleksitas domain bisnis itu sendiri.
Dalam kasus ini, solusinya bisa berupa application-level constraint (triggers)
atau perubahan desain domain (misalnya: jadwal per slot waktu, bukan per ruangan).C.2.7 Kapan Gunakan BCNF vs Tetap di 3NF?
GUNAKAN BCNF jika:
â Bebas anomali lebih penting daripada kemudahan enforce FD
â Constraint bisa di-enforce di application level (bukan hanya DB)
â Relasi memiliki banyak anomali meski sudah 3NF
â Sistem OLTP dengan frekuensi update tinggi
TETAP DI 3NF jika:
â Dependency preservation sangat penting (semua FD harus ter-enforce di DB)
â Dekomposisi BCNF menghilangkan FD yang penting secara bisnis
â Kompleksitas query menjadi terlalu tinggi setelah dekomposisi
â Tim lebih familiar dengan skema 3NF
PRAKTIK INDUSTRI:
- Sebagian besar sistem OLTP menggunakan 3NF sebagai standar
- BCNF dipertimbangkan hanya jika ada anomali nyata yang ditemukan
- BCNF lebih sering muncul dalam diskusi akademik daripada implementasi nyata
- Yang paling penting: dokumentasikan alasan apapun yang kamu pilih!C.2.8 Pengayaan Opsional: 4NF â Ketika Bahkan BCNF Pun Belum Cukup
Ini adalah pengayaan opsional. Tidak diujikan dalam UTS, tetapi penting bagi yang ingin memahami teori normalisasi secara lengkap.
Fourth Normal Form (4NF) menangani anomali dari multi-valued dependencies (MVD) â jenis anomali yang tidak ditangani oleh FD maupun BCNF.
Multi-Valued Dependency (MVD): Atribut B dan C keduanya bergantung secara independen pada A, sehingga setiap nilai A harus dipasangkan dengan setiap kombinasi nilai B dan C. Ditulis: A â â B dan A â â C.
CONTOH: Tabel KARYAWAN_SKILL_BAHASA
karyawan | skill | bahasa
---------+---------+---------
Budi | Python | Inggris
Budi | SQL | Inggris
Budi | Python | Mandarin
Budi | SQL | Mandarin
PK: (karyawan, skill, bahasa) â sudah BCNF!
MASALAH â jika Budi menambah bahasa baru (Jepang):
Harus menambah baris untuk SETIAP skill:
Budi | Python | Jepang
Budi | SQL | Jepang
Jika satu baris tertinggal â data tidak konsisten. Ini update anomaly!
PENYEBAB:
Karyawan â â Skill (independen dari Bahasa)
Karyawan â â Bahasa (independen dari Skill)
SOLUSI 4NF â pisahkan menjadi dua tabel:
KARYAWAN_SKILL(karyawan, skill)
KARYAWAN_BAHASA(karyawan, bahasa)
â Menambah bahasa baru cukup satu baris di KARYAWAN_BAHASA
â Tidak ada risiko lupa update baris yang lainKapan 4NF Relevan di Praktik? Sangat jarang â kondisi yang diperlukan adalah satu entity memiliki dua atau lebih set atribut multivalued yang benar-benar independen satu sama lain. Kasus paling umum: sistem yang melacak keahlian dan preferensi seseorang secara bersamaan dalam satu tabel. Jika menemukannya, dekomposisi ke 4NF selalu aman (lossless decomposition).
C.3 Materi 2: Trade-off Normalisasi vs Performa
C.3.1 Manfaat Normalisasi (Recap)
KEUNTUNGAN NORMALISASI PENUH (3NF/BCNF):
ââââââââââââââââââââââââââââââââââââââââ
1. INTEGRITAS DATA
â Data hanya disimpan di satu tempat â satu sumber kebenaran
â Konsistensi terjaga secara otomatis
â Tidak ada update anomaly
2. EFISIENSI STORAGE
â Tidak ada data duplikat â ukuran database lebih kecil
â Relevan untuk dataset besar
3. KEMUDAHAN MAINTENANCE
â Ubah data di satu tempat â efek langsung terasa di semua query
â Migrasi data lebih mudah
â Kode aplikasi lebih sederhana
4. FLEKSIBILITAS QUERY
â Tabel-tabel kecil yang terfokus lebih mudah dikombinasikan
â Lebih mudah menambah atribut baru tanpa restrukturisasi besar
5. KEAMANAN
â Kontrol akses lebih granular (per tabel, per kolom)
â Lebih mudah mengaudit perubahan dataC.3.2 Biaya Normalisasi â Mengapa Normalisasi Penuh Bisa Bermasalah
KERUGIAN NORMALISASI BERLEBIHAN:
âââââââââââââââââââââââââââââââââ
1. BANYAK JOIN â QUERY LEBIH LAMBAT
Contoh: Query laporan penjualan harian yang butuh data dari
PESANAN, PEMBELI, PRODUK, KATEGORI, WILAYAH, KASIR (6 tabel!)
SELECT p.id_pesanan, b.nama_pembeli, pr.nama_produk,
k.nama_kategori, w.nama_wilayah, ks.nama_kasir, p.total
FROM PESANAN p
JOIN PEMBELI b ON p.id_pembeli = b.id_pembeli
JOIN DETAIL_PESANAN dp ON p.id_pesanan = dp.id_pesanan
JOIN PRODUK pr ON dp.id_produk = pr.id_produk
JOIN KATEGORI k ON pr.id_kategori = k.id_kategori
JOIN WILAYAH w ON b.id_wilayah = w.id_wilayah
JOIN KASIR ks ON p.id_kasir = ks.id_kasir
WHERE DATE(p.tgl_pesanan) = CURDATE();
â 6 JOIN pada dataset besar = lambat, terutama tanpa index yang baik
2. KOMPLEKSITAS QUERY MENINGKAT
â Developer perlu paham struktur tabel yang dalam
â Lebih mudah salah JOIN (LEFT vs INNER, kondisi JOIN)
â Query laporan menjadi sangat panjang
3. PERFORMA BACA (READ) MENURUN
â Untuk aplikasi reporting, normalisasi penuh sering menjadi bottleneck
â Terutama pada OLAP (Online Analytical Processing) workloads
4. LATENSI MENINGKAT
â Setiap JOIN membutuhkan waktu
â Pada sistem real-time (dashboard, e-commerce), latensi query kritisC.3.3 Analogi: Normalisasi seperti Memotong Bahan Masakan
ANALOGI KULINER:
Normalisasi adalah seperti mempersiapkan bahan masakan sebelum dimasak:
Bahan mentah (data tidak ternormalisasi):
Satu keranjang besar berisi semua bahan â mudah disimpan,
sulit digunakan.
Normalisasi (memotong & memisahkan):
Wortel dipotong kecil di wadah A,
bawang diiris di wadah B,
daging dipotong dadu di wadah C.
Keuntungan: Setiap bahan mudah diakses, tidak ada duplikasi,
mudah diganti tanpa mempengaruhi bahan lain.
Kerugian: Saat memasak, harus mengambil dari banyak wadah (JOIN).
Denormalisasi terkontrol (pre-mixing):
Untuk resep yang sering dibuat, bisa pre-mix bumbu tertentu.
"Bawang + bawang putih + jahe" disimpan bersama.
Lebih cepat saat memasak, tapi perlu update semua jika
satu komposisi berubah.
PELAJARAN: Pilih strategi berdasarkan kebutuhan operasional,
bukan berdasarkan aturan absolut.C.3.4 Kapan Normalisasi Penuh Bukan Pilihan Terbaik?
SITUASI DI MANA PERTIMBANGKAN DENORMALISASI:
âââââââââââââââââââââââââââââââââââââââââââââ
1. READ-HEAVY SYSTEMS (sistem yang lebih banyak baca daripada tulis)
Contoh: Sistem pelaporan, dashboard BI, katalog produk publik
Rasio read:write > 10:1 â pertimbangkan denormalisasi
Rasio read:write < 5:1 â normalisasi penuh lebih aman
2. REPORTING & ANALYTICS (OLAP)
Contoh: Data warehouse, business intelligence
â Sengaja menggunakan skema bintang (star schema) yang denormalized
â Prioritas: kecepatan query agregasi, bukan integritas update
3. PERFORMANCE-CRITICAL QUERIES
Contoh: Dashboard real-time, API endpoint dengan SLA ketat (< 100ms)
â Query tertentu yang sudah diidentifikasi sebagai bottleneck
4. DATA YANG JARANG/TIDAK PERNAH BERUBAH
Contoh: Nama kota, kode negara, kategori produk statis
â Jika data tidak berubah, tidak ada risiko update anomaly
5. MICROSERVICE & DISTRIBUTED SYSTEMS
Contoh: Setiap service punya database sendiri dengan data yang sedikit redundan
â Trade-off antara konsistensi dan availability (CAP theorem)
6. CACHING & MATERIALIZED VIEWS
Contoh: Tabel summary yang di-refresh berkala
â Bukan denormalisasi permanen, tapi "snapshot" yang di-manage sistemC.4 Materi 3: Denormalisasi Terkontrol
C.4.1 Definisi dan Prinsip Denormalisasi Terkontrol
Denormalisasi terkontrol adalah keputusan desain yang disengaja dan terdokumentasi untuk menyimpan data redundan demi meningkatkan performa query, dengan kesadaran penuh atas trade-off yang diterima dan mekanisme untuk menjaga konsistensi data.
PERBEDAAN PENTING:
- Desain buruk = redundansi yang tidak disadari, tidak terdokumentasi, tidak ada mekanisme konsistensi
- Denormalisasi terkontrol = redundansi yang disadari, terdokumentasi dengan alasan, ada mekanisme untuk menjaga konsistensi
PRINSIP DENORMALISASI TERKONTROL:
1. UKUR DULU, DENORMALISASI KEMUDIAN
â Jangan denormalisasi berdasarkan asumsi
â Identifikasi query bottleneck dengan profiling/query plan
â Denormalisasi hanya setelah ada bukti performa bermasalah
2. DOKUMENTASIKAN SETIAP KEPUTUSAN
â Catat mengapa denormalisasi dipilih
â Catat FD mana yang "dilanggar"
â Catat mekanisme konsistensi yang digunakan
3. BATASI RUANG LINGKUP
â Denormalisasi hanya pada tabel/kolom yang benar-benar butuh
â Jangan denormalisasi seluruh database karena satu query lambat
4. SIAPKAN MEKANISME KONSISTENSI
â Database trigger untuk menjaga sinkronisasi
â Application-level logic untuk update yang konsisten
â Scheduled job untuk re-sync berkala (jika slight inconsistency ditoleransi)C.4.2 Teknik-Teknik Denormalisasi Terkontrol
TEKNIK 1: MENYIMPAN NILAI DERIVED (Stored Computed Column)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Situasi: Menghitung total nilai transaksi membutuhkan JOIN ke detail setiap query
Normalisasi murni:
PESANAN(id_pesanan, tgl, id_pembeli)
DETAIL_PESANAN(id_pesanan*, id_produk*, qty, harga)
Query total:
SELECT p.id_pesanan, SUM(dp.qty * dp.harga) as total
FROM PESANAN p JOIN DETAIL_PESANAN dp ON p.id_pesanan = dp.id_pesanan
GROUP BY p.id_pesanan;
Denormalisasi terkontrol (simpan total di PESANAN):
PESANAN(id_pesanan, tgl, id_pembeli, total_bayar) â tambah kolom total
Mekanisme konsistensi:
â Setiap INSERT/UPDATE/DELETE di DETAIL_PESANAN:
UPDATE PESANAN SET total_bayar = (
SELECT SUM(qty * harga) FROM DETAIL_PESANAN
WHERE id_pesanan = [id yang berubah]
) WHERE id_pesanan = [id yang berubah];
â Bisa menggunakan DB trigger atau application logic
Keuntungan: Query total tidak perlu JOIN dan GROUP BY
Risiko: total_bayar bisa tidak sinkron jika update mekanisme gagal
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
TEKNIK 2: MENGGABUNGKAN TABEL YANG SERING DI-JOIN (Pre-Join)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Situasi: PRODUK dan KATEGORI selalu di-JOIN bersama, kategori jarang berubah
Normalisasi murni:
PRODUK(id_produk, nama_produk, harga, id_kategori*)
KATEGORI(id_kategori, nama_kategori, deskripsi_kategori)
Denormalisasi terkontrol:
PRODUK(id_produk, nama_produk, harga, id_kategori*, nama_kategori)
âââ disalin dari KATEGORI
Mekanisme konsistensi:
â Jika nama_kategori di KATEGORI berubah, jalankan:
UPDATE PRODUK SET nama_kategori = [nilai baru]
WHERE id_kategori = [id yang berubah];
â Ini aman jika nama_kategori jarang berubah (sangat jarang = low risk)
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
TEKNIK 3: MENYIMPAN SNAPSHOT HISTORIS (Point-in-Time Data)
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Situasi: Harga produk berubah, tapi kita butuh tahu harga SAAT transaksi terjadi
Normalisasi murni (SALAH untuk kasus ini!):
DETAIL_PESANAN(id_pesanan*, id_produk*, qty) â harga tidak disimpan
â Query harga: JOIN ke PRODUK untuk ambil harga terkini
â MASALAH: harga terkini â harga saat transaksi dulu!
Denormalisasi yang tepat (dan WAJIB untuk kasus ini):
DETAIL_PESANAN(id_pesanan*, id_produk*, qty, harga_saat_pesan)
âââ snapshot harga historis!
Ini bukan denormalisasi buruk â ini adalah kebutuhan bisnis:
"Faktur harus mencatat harga pada saat transaksi, bukan harga sekarang."
Contoh nyata: Tokopedia, Shopee menyimpan harga_saat_checkout,
bukan mereferensikan harga produk saat ini.
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
TEKNIK 4: KOLOM COUNTER/AGREGAT (Aggregated Columns)
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Situasi: Jumlah artikel yang ditulis per penulis sering ditampilkan
Normalisasi murni:
PENULIS(id_penulis, nama)
ARTIKEL(id_artikel, judul, id_penulis*)
Query jumlah artikel:
SELECT p.nama, COUNT(a.id_artikel) as jumlah_artikel
FROM PENULIS p LEFT JOIN ARTIKEL a ON p.id_penulis = a.id_penulis
GROUP BY p.id_penulis;
Denormalisasi terkontrol:
PENULIS(id_penulis, nama, jumlah_artikel) â counter disimpan
Mekanisme: Increment/decrement saat artikel baru ditambah/dihapusC.4.3 Template Dokumentasi Keputusan Denormalisasi
Setiap keputusan denormalisasi HARUS didokumentasikan dengan format berikut:
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
DENORMALISASI DECISION RECORD (DDR)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
ID : DDR-[nomor]
Tanggal : [tanggal keputusan]
Dibuat oleh : [nama modeller/arsitek]
TABEL YANG TERDAMPAK: [nama tabel]
KOLOM REDUNDAN : [kolom yang ditambahkan]
SUMBER DATA ASLI : [dari tabel/kolom mana data ini seharusnya]
FD YANG "DILANGGAR" : [contoh: id_kategori â nama_kategori, tapi
nama_kategori juga disimpan di PRODUK]
ALASAN DENORMALISASI:
[ ] Performa query (lampirkan query plan sebelum/sesudah)
[ ] Snapshot historis (data harus dipertahankan pada titik waktu tertentu)
[ ] Data sangat jarang berubah (frekuensi perubahan: ___ kali/tahun)
[ ] Sistem analitik/pelaporan (OLAP workload)
[ ] Lainnya: _______________________________________________
BUKTI KEBUTUHAN PERFORMA:
Query yang bermasalah : ___________________________________
Waktu eksekusi sebelum : ___ ms (dengan [jumlah] baris data)
Target waktu eksekusi : ___ ms
MEKANISME KONSISTENSI:
[ ] Database trigger (nama trigger: _______________)
[ ] Application-level update logic
[ ] Scheduled sync job (frekuensi: _______________)
[ ] Read-only / tidak perlu konsistensi (alasan: _________)
[ ] Lainnya: _______________________________________________
RISIKO YANG DITERIMA:
___________________________________________________________
REVIEW ULANG:
Jadwal review keputusan ini: ______________________________
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââC.5 Materi 4: Validasi Logical Data Model
Setelah normalisasi selesai, langkah berikutnya adalah validasi menyeluruh â memastikan bahwa logical model tidak hanya bebas anomali, tetapi juga lengkap, benar, dan sesuai dengan kebutuhan bisnis.
C.5.1 Empat Dimensi Validasi
DIMENSI 1: COMPLETENESS (Kelengkapan)
ââââââââââââââââââââââââââââââââââââ
Pertanyaan: "Apakah semua yang perlu disimpan sudah ada di model?"
Cek:
â Semua entity dari ERD sudah menjadi tabel?
â Semua relationship sudah direpresentasikan (FK / junction table)?
â Semua atribut penting ada sebagai kolom?
â Semua business rules dari pertemuan 2 ada representasinya?
Cara validasi:
â Checklist silang antara ERD (pertemuan 4) dan skema tabel (pertemuan 5)
â Walkthrough use case: "Bisakah kita menjawab pertanyaan bisnis X dari model ini?"
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
DIMENSI 2: CORRECTNESS (Ketepatan)
ââââââââââââââââââââââââââââââââââ
Pertanyaan: "Apakah semua elemen model sudah benar secara teknis?"
Cek:
â Setiap tabel punya PK yang valid (unik, tidak null, stabil)?
â Setiap FK merujuk ke PK yang tepat di tabel yang benar?
â Kardinalitas relationship tercermin dengan benar di penempatan FK?
â Participation constraint tercermin dengan benar di NULL/NOT NULL?
â Semua tabel minimal dalam 3NF (atau BCNF jika diperlukan)?
â ON DELETE/ON UPDATE action sudah ditentukan dan sesuai?
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
DIMENSI 3: CONSISTENCY (Konsistensi)
ââââââââââââââââââââââââââââââââââââ
Pertanyaan: "Apakah seluruh model konsisten secara internal?"
Cek:
â Naming convention konsisten di seluruh tabel (snake_case? camelCase?)?
â Tipe data yang serupa menggunakan domain yang sama?
(Semua ID menggunakan INT? Semua tanggal menggunakan DATE?)
â Tidak ada konflik antara constraint di tabel yang berbeda?
â Model konsisten dengan ERD yang menjadi acuannya?
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
DIMENSI 4: USABILITY (Keterbacaan & Ketergantian)
âââââââââââââââââââââââââââââââââââââââââââââââââ
Pertanyaan: "Apakah model ini bisa dipahami dan digunakan oleh orang lain?"
Cek:
â Nama tabel dan kolom deskriptif dan self-explanatory?
â Ada komentar/dokumentasi untuk kolom yang tidak jelas maknanya?
â Query bisnis umum bisa dibuat dengan JOIN yang wajar (tidak > 5-6 JOIN)?
â Tidak ada tabel "orphan" yang tidak terhubung dengan tabel lain?
â Model bisa dipresentasikan dan dipahami oleh stakeholder bisnis?C.5.2 Checklist Validasi Komprehensif
CHECKLIST VALIDASI LOGICAL DATA MODEL
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
[COMPLETENESS]
⥠Semua strong entity dari ERD sudah menjadi tabel
⥠Semua weak entity sudah menjadi tabel dengan PK komposit yang benar
⥠Semua relationship M:N sudah menghasilkan junction table
⥠Semua multivalued attribute sudah menjadi tabel tersendiri
⥠Semua ISA hierarchy sudah dipetakan dengan salah satu strategi
⥠Semua relationship attribute sudah menjadi kolom di junction table
⥠Business rules dari elisitasi kebutuhan terwakili dalam model
⥠Semua use case utama dapat dijawab dengan query yang wajar
[CORRECTNESS â Primary Key]
⥠Setiap tabel memiliki tepat satu primary key
⥠PK tidak pernah NULL
⥠PK unik untuk setiap baris
⥠PK stabil (tidak berubah sepanjang waktu)
⥠PK komposit digunakan dengan benar (junction table, weak entity)
⥠Surrogate key digunakan hanya jika ada alasan yang valid
[CORRECTNESS â Foreign Key]
⥠Setiap FK merujuk ke PK yang valid di tabel referensi
⥠Total participation â FK NOT NULL
⥠Partial participation â FK boleh NULL
⥠ON DELETE CASCADE digunakan pada weak entity dan tabel dependen
⥠ON DELETE RESTRICT digunakan jika integritas data kritis
⥠ON DELETE SET NULL digunakan untuk relationship opsional yang membolehkan orphan
⥠Setiap FK diberi nama yang deskriptif
[CORRECTNESS â Normalisasi]
⥠Tidak ada multivalued attribute dalam satu kolom (1NF)
⥠Tidak ada repeating groups (1NF)
⥠Tidak ada partial dependency (2NF)
⥠Tidak ada transitive dependency (3NF)
⥠Keputusan denormalisasi (jika ada) sudah terdokumentasi dalam DDR
[CONSISTENCY]
⥠Nama tabel menggunakan konvensi yang konsisten
⥠Nama kolom menggunakan konvensi yang konsisten
⥠Tipe data domain yang serupa menggunakan domain yang sama
⥠PK naming convention konsisten (id_[tabel] atau [tabel]_id)
⥠FK naming convention konsisten
⥠Tidak ada konflik antara constraint di tabel berbeda
[USABILITY]
⥠Nama tabel dan kolom self-explanatory
⥠Kolom dengan nama ambigu punya komentar/dokumentasi
⥠Query bisnis umum dapat dibuat tanpa JOIN berlebihan (⤠5 tabel)
⥠Tidak ada tabel orphan yang tidak terhubung
⥠Model dapat dipresentasikan ke stakeholder non-teknis
⥠Data dictionary sudah (atau sedang) dibuatC.5.3 Walkthrough Validasi: Contoh Kasus
STUDI KASUS VALIDASI â Sistem Perpustakaan Digital
Skema yang akan divalidasi:
ANGGOTA(id_anggota, nama, email, tgl_daftar, id_jenis*)
JENIS_ANGGOTA(id_jenis, nama_jenis, batas_pinjam, denda_harian)
BUKU(id_buku, judul, isbn, tahun_terbit, id_penulis*, id_penerbit*)
PENULIS(id_penulis, nama_penulis)
PENERBIT(id_penerbit, nama_penerbit, kota)
EKSEMPLAR(id_eksemplar, id_buku*, kondisi, lokasi_rak)
PEMINJAMAN(id_pinjam, id_anggota*, id_eksemplar*, tgl_pinjam, tgl_kembali_rencana, tgl_kembali_aktual)
WALKTHROUGH VALIDASI:
[COMPLETENESS]
â Semua entitas ada: ANGGOTA, BUKU, PENULIS, PENERBIT, EKSEMPLAR, PEMINJAMAN
TEMUAN:
â Bagaimana jika satu buku ditulis oleh beberapa penulis?
Saat ini id_penulis di BUKU hanya satu FK â tidak bisa co-authorship!
PERBAIKAN: Buat junction table BUKU_PENULIS(id_buku*, id_penulis*)
â Tidak ada tabel untuk KATEGORI buku (fiksi, non-fiksi, sains, dll.)
Apakah ini memang tidak diperlukan? Perlu konfirmasi ke stakeholder.
â Peminjaman sudah mencakup eksemplar (bukan hanya judul buku) â benar!
(Karena bisa ada banyak eksemplar dari satu buku)
[CORRECTNESS â PK]
â Semua tabel punya PK
â PEMINJAMAN menggunakan surrogate PK (id_pinjam) â wajar karena
composite PK dari (id_anggota, id_eksemplar) bisa sama jika
orang yang sama meminjam buku yang sama lagi
[CORRECTNESS â FK]
â PEMINJAMAN tidak punya ON DELETE/ON UPDATE yang jelas!
Jika ANGGOTA dihapus â apa yang terjadi dengan riwayat peminjaman?
PERBAIKAN: ON DELETE RESTRICT (tidak boleh hapus anggota yang punya riwayat)
â EKSEMPLAR â ON DELETE CASCADE dari BUKU (masuk akal: hapus buku â hapus semua eksemplar)
[CORRECTNESS â Normalisasi]
Cek PEMINJAMAN(id_pinjam, id_anggota*, id_eksemplar*, tgl_pinjam,
tgl_kembali_rencana, tgl_kembali_aktual):
FD: id_pinjam â semua kolom (full dependency pada single PK) â
Apakah ada transitive dependency?
tgl_kembali_rencana bergantung pada id_pinjam? YA (langsung) â
Apakah tgl_kembali_rencana â tgl_kembali_aktual? TIDAK (keduanya independen) â
â Sudah 3NF â
TEMUAN:
? Berapa lama batas pinjam? Apakah disimpan di JENIS_ANGGOTA (batas_pinjam)?
Konsistensi: jika batas_pinjam berubah, apakah tgl_kembali_rencana
yang sudah ada perlu diupdate? â Perlu keputusan bisnis!
[CONSISTENCY]
â Nama kolom tidak konsisten:
id_anggota vs nama_penulis vs id_penerbit â pilih satu konvensi!
PERBAIKAN: gunakan id_[noun] untuk semua PK
â Semua tanggal menggunakan tipe DATE (konsisten)
[USABILITY]
â Query "daftar buku yang sedang dipinjam beserta peminjamnya"
membutuhkan JOIN: PEMINJAMAN â ANGGOTA, PEMINJAMAN â EKSEMPLAR â BUKU
â 3 tabel, masih wajar â
TEMUAN:
? tgl_kembali_aktual NULL berarti buku belum dikembalikan. Apakah ini jelas
bagi developer yang membaca skema? Perlu komentar/dokumentasi.
RINGKASAN TEMUAN:
đ´ Kritis (harus diperbaiki): Co-authorship tidak tertangani
đĄ Perlu perhatian: ON DELETE rules tidak lengkap, naming inconsistency
đĸ Informasi: Dokumentasi tgl_kembali_aktual NULL, kebijakan update batas_pinjamC.6 Sesi Peer Review Model Data Proyek
C.6.1 Tujuan dan Manfaat Peer Review
Peer review adalah proses di mana kamu mengevaluasi model data yang dibuat oleh rekan sejawat, dan menerima evaluasi dari mereka terhadap modelmu. Ini bukan tentang mencari kesalahan â ini tentang menemukan peluang perbaikan bersama.
MANFAAT PEER REVIEW:
Untuk REVIEWER (yang memberi review):
â Melatih kemampuan analisis kritis terhadap desain orang lain
â Terekspos pada domain dan pendekatan yang berbeda
â Memperdalam pemahaman tentang prinsip-prinsip yang sudah dipelajari
â Belajar bagaimana memberikan umpan balik yang konstruktif
Untuk REVIEWEE (yang menerima review):
â Mendapatkan perspektif segar dari orang yang tidak terlibat dalam perancangan
â Menemukan blind spot yang tidak terlihat saat merancang sendiri
â Mendapatkan validasi atas keputusan desain yang sudah dibuat
â Meningkatkan kualitas model sebelum presentasi akhirC.6.2 Prosedur Peer Review (25 menit)
SETUP (2 menit):
Setiap mahasiswa bertukar dokumen logical model (skema + keterangan)
dengan rekan yang ditentukan oleh dosen (berpasangan atau kelompok 3)
FASE 1 â PEMAHAMAN (5 menit):
Reviewer membaca model yang diterima:
â Pahami domain bisnis yang dipilih
â Identifikasi semua tabel dan relasi yang ada
â Baca keterangan/keputusan desain yang sudah didokumentasikan
FASE 2 â REVIEW SISTEMATIK (13 menit):
Gunakan checklist validasi untuk memeriksa model:
â Tandai setiap poin: â (OK), â (Ada masalah), ? (Perlu klarifikasi)
â Untuk setiap â dan ?, tuliskan temuan dan saran perbaikan
FASE 3 â DISKUSI (5 menit):
Reviewer dan reviewee berdiskusi:
â Reviewer mempresentasikan temuannya
â Reviewee menjelaskan keputusan desain yang mungkin disalahpahami
â Bersama-sama menentukan apakah temuan valid atau bukan
â Reviewee mencatat perbaikan yang akan dilakukanC.6.3 Template Laporan Peer Review
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
LAPORAN PEER REVIEW â LOGICAL DATA MODEL
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Reviewer : [Nama Reviewer] / [NIM]
Reviewee : [Nama Pemilik Model] / [NIM]
Domain Proyek : [Domain bisnis yang direview]
Tanggal Review : [tanggal]
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
RINGKASAN EKSEKUTIF
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
[2-3 kalimat tentang kesan umum model: kekuatan utama dan
area yang paling membutuhkan perhatian]
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
KEKUATAN MODEL
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
1. [Aspek desain yang sudah baik â jelaskan mengapa]
2. [Aspek desain yang sudah baik â jelaskan mengapa]
3. [Aspek desain yang sudah baik â jelaskan mengapa]
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
TEMUAN DAN SARAN PERBAIKAN
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
[Prioritas: đ´ Kritis / đĄ Penting / đĸ Disarankan]
TEMUAN 1 [đ´/đĄ/đĸ]:
Tabel/Kolom yang terdampak : ___________________________
Deskripsi masalah : ___________________________
Dampak jika tidak diperbaiki: __________________________
Saran perbaikan : ___________________________
TEMUAN 2 [đ´/đĄ/đĸ]:
Tabel/Kolom yang terdampak : ___________________________
Deskripsi masalah : ___________________________
Dampak jika tidak diperbaiki: __________________________
Saran perbaikan : ___________________________
TEMUAN 3 [đ´/đĄ/đĸ]:
[Lanjutkan...]
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
PERTANYAAN UNTUK KLARIFIKASI
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
1. [Hal yang perlu klarifikasi dari reviewee â bukan kritik,
tapi permintaan penjelasan]
2. [...]
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
CHECKLIST VALIDASI (RINGKASAN)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
Completeness : [x/8 poin terpenuhi] â Catatan: ____________
Correctness : [x/12 poin terpenuhi] â Catatan: ___________
Consistency : [x/5 poin terpenuhi] â Catatan: ____________
Usability : [x/5 poin terpenuhi] â Catatan: ____________
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
PENILAIAN KESELURUHAN
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
[ ] Model sudah solid, siap untuk implementasi dengan perbaikan minor
[ ] Model membutuhkan beberapa perbaikan sebelum implementasi
[ ] Model membutuhkan revisi signifikan
Komentar tambahan:
_______________________________________________________________
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââC.7 Ringkasan Materi Pertemuan 1â7 & Persiapan UTS
C.7.1 Peta Konsep Seluruh Materi Sebelum UTS
PETA KONSEP: DATA MODELLING (Pertemuan 1â7)
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
P1: PENGANTAR
ââ Data vs Informasi vs Metadata
ââ Tiga level model: Conceptual â Logical â Physical
ââ Peran data modelling dalam SDLC dan Sains Data
P2: KEBUTUHAN DATA & BUSINESS RULES
ââ Stakeholder dan teknik elisitasi
ââ Business rules sebagai landasan model
ââ Jenis business rules (domain, entity, referential, trigger)
P3: ENTITY, ATTRIBUTE, RELATIONSHIP
ââ Entity: Strong vs Weak
ââ Attribute: Simple, Composite, Multivalued, Derived, Stored
ââ Relationship: Unary, Binary, Ternary
ââ Identifier: Natural vs Surrogate Key, Composite Key
P4: ENTITY RELATIONSHIP DIAGRAM (ERD)
ââ Notasi Chen: rectangle, oval, diamond, double shapes
ââ Notasi Crow's Foot: ||, |<, o|, o<
ââ Kardinalitas: 1:1, 1:N, M:N
ââ Participation: Total (mandatory) vs Partial (optional)
ââ Weak Entity: double rectangle + double diamond
ââ ISA Hierarchy: Disjoint/Overlapping à Total/Partial
P5: TRANSFORMASI ERD â LOGICAL MODEL (9 ATURAN MAPPING)
ââ Aturan 1: Strong entity â tabel
ââ Aturan 2: Derived attribute â tidak disimpan
ââ Aturan 3: Rel. 1:N â FK di sisi "N"
ââ Aturan 4: Rel. M:N â junction table
ââ Aturan 5: Rel. 1:1 â FK di sisi total participation
ââ Aturan 6: Rel. ternary â junction table 3 FK
ââ Aturan 7: Unary rel. â self-referencing FK
ââ Aturan 8: Weak entity â PK komposit (partial key + FK)
ââ Aturan 9: Multivalued attr â tabel tersendiri
ââ Aturan 10: ISA â 3 strategi (A/B/C)
P6: NORMALISASI 1NF â 3NF
ââ Tiga anomali: Update, Insertion, Deletion
ââ Functional Dependency (FD): Full, Partial, Transitive
ââ 1NF: nilai atomik, tidak ada repeating groups
ââ 2NF: tidak ada partial dependency (relevan PK komposit)
ââ 3NF: tidak ada transitive dependency
ââ "The key, the whole key, nothing but the key"
P7: NORMALISASI LANJUTAN & EVALUASI
ââ BCNF: setiap determinant harus superkey
ââ BCNF vs 3NF: dependency preservation trade-off
ââ Trade-off normalisasi vs performa
ââ Denormalisasi terkontrol: teknik dan dokumentasi
ââ Validasi 4 dimensi: Completeness, Correctness, Consistency, Usability
ââ Peer review: proses dan templateC.7.2 Kisi-Kisi UTS
FORMAT UTS:
- Durasi : 150 menit
- Bobot : 30% dari nilai akhir
- Sifat : Ujian tertulis + studi kasus (boleh bawa 1 lembar catatan A4)
DISTRIBUSI SOAL:
BAGIAN A â Pilihan Ganda (30%): 20 soal à 1,5 poin
Cakupan: konsep dari pertemuan 1â7
Contoh topik:
â Perbedaan conceptual vs logical vs physical model
â Jenis-jenis attribute dan kapan menggunakannya
â Kardinalitas dan participation constraint
â Aturan mapping ERD (kapan membuat junction table, FK placement)
â Perbedaan partial vs transitive dependency
â Syarat 1NF, 2NF, 3NF, BCNF
BAGIAN B â Soal Uraian Pendek (30%): 4 soal à 7,5 poin
Contoh topik:
â Identifikasi anomali dari tabel yang diberikan
â Identifikasi functional dependency dari narasi bisnis
â Perbedaan dan trade-off antara 3NF dan BCNF
â Pilih strategi mapping ISA dan justifikasi
BAGIAN C â Studi Kasus (40%): 1 kasus besar
Diberikan narasi bisnis (Âą 200 kata)
Tugas:
(a) Identifikasi entity, attribute, relationship (10 poin)
(b) Gambar ERD dalam notasi yang dipilih (15 poin)
(c) Transform ERD ke skema relasional menggunakan 9 aturan (10 poin)
(d) Normalisasi tabel yang diberikan dari 0NF ke 3NF (5 poin)
DISTRIBUSI PERTEMUAN DI UTS:
P1 (Pengantar) : ~5%
P2 (Business Rules) : ~10%
P3 (Entity/Attr/Rel) : ~15%
P4 (ERD) : ~20%
P5 (Mapping) : ~20%
P6 (Normalisasi 1-3NF) : ~20%
P7 (BCNF & Validasi) : ~10%C.7.3 Tips Belajar untuk UTS
STRATEGI BELAJAR YANG EFEKTIF:
1. LATIHAN DARI NARASI KE GAMBAR KE TABEL
â Ambil satu domain (misalnya: apotek, toko pakaian, rental mobil)
â Tulis narasi 150 kata
â Gambar ERD tanpa melihat catatan
â Transform ke skema tabel
â Normalisasi jika perlu
â Ulangi dengan domain yang berbeda
2. FLASHCARD UNTUK DEFINISI KRITIS
â BCNF vs 3NF: kapan masing-masing digunakan?
â 9 aturan mapping: apa aksi untuk masing-masing komponen ERD?
â Tiga anomali: bisa berikan contoh konkret?
â Participation constraint: bagaimana tercermin di FK?
3. REVIEW TUGAS-TUGAS SEBELUMNYA
â ERD dari tugas pertemuan 4
â Logical model dari tugas pertemuan 5
â Normalisasi dari tugas pertemuan 6
â Pahami mengapa setiap keputusan dibuat
4. INGAT PENGECUALIAN DAN EDGE CASES
â 2NF hanya relevan untuk PK komposit
â Tabel dengan PK single-column: 1NF â otomatis 2NF
â BCNF bisa kehilangan dependency preservation (trade-off)
â Denormalisasi BUKAN selalu kesalahan desain
5. SIAPKAN LEMBAR CATATAN (1 LEMBAR A4)
â Simbol ERD (Chen dan Crow's Foot)
â 9 aturan mapping dalam format tabel
â Syarat 1NF/2NF/3NF/BCNF
â Cara cek dan dekomposisi untuk setiap normal form
MALAM SEBELUM UTS:
â Jangan belajar hal baru â review saja yang sudah dipelajari
â Tidur cukup: otak yang segar lebih baik dari catatan yang lengkap
â Siapkan alat tulis dan lembar catatanD. LATIHAN DAN DISKUSI
D.1 Latihan BCNF (Berpasangan, 15 menit)
Soal: Untuk setiap relasi berikut, tentukan apakah sudah BCNF. Jika belum, lakukan dekomposisi.
Relasi 1:
PENUGASAN(pegawai_id, proyek_id, manajer_id)
Business Rules:
- Setiap pegawai dalam satu proyek punya tepat satu manajer
- Setiap manajer hanya mengelola satu proyek
FD:
{pegawai_id, proyek_id} â manajer_id
manajer_id â proyek_id
Pertanyaan:
(a) Apa saja candidate key dari relasi ini?
(b) Apakah ada FD yang determinant-nya bukan superkey?
(c) Apakah sudah BCNF? Jika tidak, dekomposisi!Relasi 2:
KURSUS_INSTRUKTUR(kursus_id, mahasiswa_id, instruktur_id)
Business Rules:
- Satu kursus bisa diajarkan oleh beberapa instruktur
- Satu mahasiswa bisa mengambil banyak kursus
- Satu mahasiswa di satu kursus hanya ditangani satu instruktur
- Satu instruktur hanya mengajar satu kursus
FD:
{mahasiswa_id, kursus_id} â instruktur_id
instruktur_id â kursus_id
Pertanyaan:
(a) Apakah ada pelanggaran BCNF?
(b) Dekomposisi ke BCNF!
(c) Apakah semua FD awal masih bisa di-enforce setelah dekomposisi?D.2 Diskusi Kelompok: "Kapan Denormalisasi?" (10 menit)
Instruksi: Dalam kelompok 3-4 orang, diskusikan skenario berikut dan tentukan apakah denormalisasi dibenarkan. Berikan justifikasi!
SKENARIO 1: APLIKASI MEDIA SOSIAL
Sebuah platform media sosial (mirip Instagram) menampilkan jumlah
"like" di setiap postingan. Setiap kali halaman di-refresh,
query `SELECT COUNT(*) FROM LIKE WHERE post_id = ?` dijalankan.
Dengan 50 juta postingan aktif dan 1 juta pengguna aktif per detik,
query ini menjadi bottleneck.
Pertanyaan: Apakah menyimpan kolom `jumlah_like` di tabel POSTINGAN
adalah denormalisasi yang dibenarkan?
SKENARIO 2: SISTEM PERBANKAN
Sebuah bank ingin menyimpan nama_nasabah di tabel TRANSAKSI
(selain di tabel NASABAH) agar laporan transaksi historis tetap
menampilkan nama yang digunakan saat transaksi â bahkan jika nasabah
kemudian mengganti nama karena menikah atau adopsi.
Pertanyaan: Apakah ini denormalisasi yang valid?
SKENARIO 3: SISTEM AKADEMIK
Tim developer menyimpan nama_mata_kuliah langsung di tabel NILAI
(selain di tabel MATA_KULIAH) agar "lebih mudah di-query tanpa JOIN."
Pertanyaan: Apakah ini denormalisasi yang bisa dibenarkan?E. EVALUASI DAN PENILAIAN
E.1 Kuis Penutup (5 menit, bobot partisipasi)
-
Berikan SATU contoh relasi yang sudah 3NF tetapi belum BCNF. Sebutkan FD mana yang menjadi penyebabnya!
-
Sebutkan satu teknik denormalisasi terkontrol dan satu kondisi bisnis yang membuatnya dibenarkan!
-
Dari 4 dimensi validasi logical model (Completeness, Correctness, Consistency, Usability), mana yang paling sering diabaikan oleh mahasiswa pemula dalam merancang database? Mengapa?
E.2 Laporan Peer Review (dikumpulkan sebelum pertemuan UTS)
Tugas: Tulis laporan peer review menggunakan template yang telah diberikan (bagian C.6.3) berdasarkan sesi peer review yang dilakukan di kelas.
Ketentuan:
- Format: PDF, minimal 2 halaman
- Isi: ikuti template laporan peer review secara lengkap
- Sertakan juga: respon singkat (setengah halaman) dari reviewee tentang temuan mana yang akan diperbaiki dan mengapa
Nama file: PeerReview_[NIM_Reviewer]_untuk_[NIM_Reviewee].pdf
Deadline: Dikumpulkan ke Ngaji UIN Gusdur maksimal H-1 sebelum UTS
F. PERSIAPAN PERTEMUAN 8 (UTS)
F.1 Format dan Cakupan UTS
Lihat bagian C.7.2 untuk kisi-kisi lengkap UTS.
F.2 Checklist Persiapan Pribadi
CHECKLIST PERSIAPAN UTS:
Materi:
⥠Sudah review catatan dari pertemuan 1â7
⥠Sudah latihan membuat ERD dari narasi tanpa melihat catatan
⥠Sudah latihan mapping ERD ke tabel (minimal 2 kasus berbeda)
⥠Sudah latihan normalisasi dari 0NF ke 3NF (minimal 2 kasus)
⥠Sudah memahami perbedaan 3NF vs BCNF dengan contoh konkret
Dokumen:
⥠Lembar catatan A4 sudah disiapkan (boleh tulisan tangan atau print)
⥠Pastikan lembar catatan mencakup: simbol ERD, 9 aturan mapping,
syarat NF, cara dekomposisi
Logistik:
⥠Tahu waktu dan lokasi ujian
⥠Alat tulis (pensil, pulpen, penggaris untuk gambar ERD)
⥠Identitas (KTM atau kartu ujian jika ada)G. REFERENSI
G.1 Referensi Utama
-
Elmasri, R. & Navathe, S. B. (2015). Fundamentals of Database Systems (7th Edition). Pearson. ISBN: 978-0133970777
- Chapter 14: Basics of Functional Dependencies and Normalization
- Section 14.4: Boyce-Codd Normal Form (BCNF â bacaan utama)
- Chapter 15: Relational Database Design Algorithms and Further Dependencies
- Section 15.1: Further Normal Forms (4NF, 5NF â untuk referensi)
- Section 15.2: Lossless (Nonadditive) Join Property and Dependency Preservation
- Chapter 14: Basics of Functional Dependencies and Normalization
-
Hoberman, S. (2009). Data Modeling Made Simple (2nd Edition). Technics Publications. ISBN: 978-0977140060
- Chapter 8: When NOT to Normalize (denormalisasi terkontrol)
- Chapter 9: Validating the Logical Data Model
-
Connolly, T. & Begg, C. (2014). Database Systems: A Practical Approach to Design, Implementation, and Management (6th Edition). Pearson.
- Chapter 14: Normalization
- Section 14.6: Boyce-Codd Normal Form (BCNF)
- Chapter 17: Methodology â Logical Database Design for the Relational Model
- Section 17.5: Validate Relations Using Normalization
- Chapter 14: Normalization
G.2 Referensi Pendukung
-
Date, C. J. (2012). Database Design and Relational Theory: Normal Forms and All That Jazz. O'Reilly Media.
- Chapter 5: Boyce-Codd Normal Form (penjelasan teoritis mendalam)
-
Kimball, R. & Ross, M. (2013). The Data Warehouse Toolkit (3rd Edition). Wiley.
- Chapter 19: "Normalization vs Dimensionality" (denormalisasi dalam konteks data warehouse) (Referensi lanjutan â relevan untuk perkuliahan semester depan)
-
Heath, I. (1971). "Unacceptable File Operations in a Relational Database." Proceedings of the ACM SIGFIDET Workshop, 19â33. (Makalah historis yang pertama kali membahas keterbatasan 3NF)
G.3 Referensi Online
- MySQL Documentation. "Data Types and Normalization" â https://dev.mysql.com/doc/refman/8.0/en/ (opens in a new tab)
- Database Star. "Boyce-Codd Normal Form (BCNF): A Simple Explanation" â https://www.databasestar.com/boyce-codd-normal-form/ (opens in a new tab)
- Vertabelo Academy. "BCNF vs 3NF: What's the Difference?" â https://vertabelo.com/blog/boyce-codd-normal-form/ (opens in a new tab)
G.4 Video Resources
- Decomplexify â "BCNF Explained Simply" (YouTube â visualisasi terbaik untuk BCNF)
- CMU Database Group â "Database Systems: Normalization" (YouTube â kuliah dari Carnegie Mellon University)
- Studytonight â "Lossless Decomposition" (YouTube â penting untuk memahami properti dekomposisi)
H. LAMPIRAN
Lampiran A: Lembar Kerja Peer Review (versi cetak)
LEMBAR KERJA PEER REVIEW Reviewer: ___________________________ NIM: _______________ Reviewee: ___________________________ NIM: _______________ Domain Proyek yang Direview: _________________________________ Tanggal: _____________________
FASE 1 â PEMAHAMAN MODEL (5 menit)
Jumlah tabel dalam model: _______ Daftar semua tabel (tulis nama-namanya):
Apakah kamu bisa memahami domain bisnis dari skema ini (tanpa penjelasan)? [ ] Ya, sangat jelas [ ] Ya, dengan sedikit usaha [ ] Tidak, kurang deskriptif
FASE 2 â CHECKLIST VALIDASI
| No | Aspek | Status | Catatan |
|---|---|---|---|
| 1 | Semua entity dari narasi ada sebagai tabel | â/â/? | |
| 2 | Weak entity punya PK komposit yang benar | â/â/? | |
| 3 | Semua M:N sudah punya junction table | â/â/? | |
| 4 | Multivalued attribute sudah dipisah | â/â/? | |
| 5 | Setiap tabel punya PK yang valid | â/â/? | |
| 6 | FK placement sudah benar (di sisi "N") | â/â/? | |
| 7 | Total participation â FK NOT NULL | â/â/? | |
| 8 | Tidak ada partial dependency (2NF) | â/â/? | |
| 9 | Tidak ada transitive dependency (3NF) | â/â/? | |
| 10 | Naming convention konsisten | â/â/? | |
| 11 | Tabel dan kolom namanya deskriptif | â/â/? | |
| 12 | Query bisnis umum tidak butuh > 5 JOIN | â/â/? |
FASE 3 â TEMUAN DAN SARAN
Kekuatan Model (minimal 2):
-
-
- (opsional) ____________________________________________________
Temuan Kritis (đ´ harus diperbaiki):
| # | Tabel/Kolom | Masalah | Saran Perbaikan |
|---|---|---|---|
| 1 | |||
| 2 |
Temuan Penting (đĄ sebaiknya diperbaiki):
| # | Tabel/Kolom | Masalah | Saran Perbaikan |
|---|---|---|---|
| 1 | |||
| 2 |
Pertanyaan untuk Klarifikasi:
Penilaian Keseluruhan: [ ] Solid â siap implementasi dengan perbaikan minor [ ] Butuh beberapa perbaikan sebelum implementasi [ ] Butuh revisi signifikan
RESPON REVIEWEE (diisi setelah diskusi):
Temuan yang akan diperbaiki dan alasannya:
Temuan yang tidak akan diperbaiki dan alasannya (jika ada):
Lampiran B: Ringkasan BCNF vs 3NF â Tabel Perbandingan Lengkap
ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â BCNF vs 3NF â PERBANDINGAN KOMPREHENSIF â
â ââââââââââââââââââââââââĻâââââââââââââââââââââââĻââââââââââââââââââââââââŖ
â Aspek â 3NF â BCNF â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Definisi formal â Tidak ada transitive â Setiap determinant â
â â dep. pada PK + â harus superkey â
â â pengecualian prime â (tanpa pengecualian) â
â â attribute â â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Kekuatan syarat â Lebih longgar â Lebih ketat â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Anomali yang â Sebagian besar (tapi â Semua anomali â
â dieliminasi â tidak semua) â berbasis FD â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Lossless â Selalu terjaga â Selalu terjaga â
â decomposition â â â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Dependency â Selalu terjaga â TIDAK selalu terjaga â
â preservation â â (bisa hilang) â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Kapan terjadi â Tidak ada â Ketika ada multiple â
â perbedaan 3NF â BCNF â â overlapping candidate â
â â â keys â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Digunakan di industri â Sangat umum (standar)â Lebih jarang, kasus â
â â â spesifik â
â ââââââââââââââââââââââââŦâââââââââââââââââââââââŦââââââââââââââââââââââââŖ
â Kapan pilih ini? â FD harus bisa â Ingin bebas anomali â
â â di-enforce di DB â sepenuhnya + siap â
â â level â pakai app logic untuk â
â â â FD yang hilang â
âââââââââââââââââââââââââŠâââââââââââââââââââââââŠââââââââââââââââââââââââLampiran C: Panduan Dekomposisi BCNF â Step-by-Step
PANDUAN DEKOMPOSISI BCNF
LANGKAH 1: Identifikasi semua Candidate Key
â Candidate key adalah atribut minimal yang mengidentifikasi setiap baris unik
â Superkey = candidate key atau superset dari candidate key
LANGKAH 2: Tuliskan semua FD non-trivial
â Trivial: X â Y dimana Y â X (Y adalah subset dari X)
â Non-trivial: semua FD lainnya
LANGKAH 3: Cek setiap FD â apakah determinant-nya superkey?
â YA â FD ini tidak melanggar BCNF â
â TIDAK â FD ini melanggar BCNF â
LANGKAH 4: Untuk FD yang melanggar (X â Y, X bukan superkey):
â Buat R1 = Projection(R, X âĒ Y) dengan PK = X
â Buat R2 = Projection(R, R - Y + X) dengan X sebagai FK ke R1
â Catatan: X tetap ada di R2 (sebagai FK, bukan dihapus)
LANGKAH 5: Periksa lossless-join property
â Dekomposisi (R1, R2) bersifat lossless jika:
Atribut yang dibagi (X) adalah superkey dari salah satu R1 atau R2
â Karena X adalah PK dari R1 â selalu lossless â
LANGKAH 6: Rekursi
â Jika R1 atau R2 belum BCNF, ulangi langkah 3-5 pada relasi tersebut
CONTOH SINGKAT:
R(A, B, C, D) dengan FD: AB â C, AB â D, C â B
CK: {A,B} (hanya satu candidate key)
FD melanggar BCNF: C â B (C bukan superkey)
Dekomposisi:
R1(C, B) PK: C â capture FD: C â B
R2(A, C, D) PK: {A,C} atau {A,B} via C?
â Gunakan A dan C: R2(A, C, D)
C â FK ke R1
Cek R2: FD yang berlaku di R2?
{A,C} â D (dari AB â D, karena C â B, jadi A + C â D)
â {A,C} adalah superkey dari R2 â R2 sudah BCNF â
Hasil: R1(C, B) dan R2(A, C*, D)
C adalah PK R1 dan FK di R2
PERINGATAN:
FD C â B dari R asli: masih ter-enforce di R1 â
FD AB â C dari R asli:
â Di R2 ada A dan C. Apakah bisa enforce AB â C?
â Perlu B, tapi B tidak ada di R2!
â FD ini tidak ter-preserve â butuh application logic/triggerLampiran D: Kumpulan Soal Latihan Mandiri untuk UTS
Soal Latihan 1 â Identifikasi dan Dekomposisi BCNF
Relasi: PROYEK_VENDOR(proyek_id, vendor_id, nama_vendor, kota_vendor, kontrak_id, nilai_kontrak)
Business Rules:
- Satu proyek bisa punya banyak vendor
- Satu vendor bisa mengerjakan banyak proyek
- Satu pasang (proyek, vendor) menghasilkan tepat satu kontrak
- Satu vendor berdomisili di satu kota
- Satu kontrak hanya untuk satu pasang (proyek, vendor)
Pertanyaan:
(a) Identifikasi semua candidate key
(b) Tuliskan semua FD
(c) Cek 3NF dan BCNF
(d) Dekomposisi ke 3NF atau BCNF (pilih yang tepat, justifikasi!)Soal Latihan 2 â Trade-off Normalisasi
Sebuah startup e-commerce memiliki tabel PRODUK yang sudah 3NF:
PRODUK(id_produk, nama, harga, stok, id_kategori*)
KATEGORI(id_kategori, nama_kategori, deskripsi)
RATING(id_produk*, total_rating, jumlah_ulasan, rata_rata_rating)
Halaman beranda menampilkan 100 produk dengan nama_kategori dan rata_rata_rating.
Query saat ini:
SELECT p.id_produk, p.nama, p.harga, k.nama_kategori, r.rata_rata_rating
FROM PRODUK p
JOIN KATEGORI k ON p.id_kategori = k.id_kategori
JOIN RATING r ON p.id_produk = r.id_produk
WHERE p.aktif = TRUE
ORDER BY r.rata_rata_rating DESC
LIMIT 100;
Dengan 500.000 produk aktif, query ini membutuhkan 800ms.
Pertanyaan:
(a) Apakah ada keputusan denormalisasi yang bisa dilakukan?
(b) Kolom apa yang sebaiknya didenormalisasi? Ke tabel mana?
(c) Apa mekanisme konsistensi yang harus disiapkan?
(d) Apa risiko yang harus diterima?
(e) Tulis DDR (Denormalisasi Decision Record) untuk keputusan ini!Soal Latihan 3 â Validasi Model
Diberikan skema logical model berikut untuk sistem rental kendaraan:
PELANGGAN(id_pelanggan, nama, email, telp, sim_nomor, sim_berlaku_hingga)
KENDARAAN(id_kendaraan, plat_nomor, merek, model, tahun, tarif_harian, id_kategori)
KATEGORI(nama_kategori, deskripsi, kapasitas) â PERHATIKAN!
RENTAL(id_rental, id_pelanggan*, id_kendaraan*, tgl_mulai, tgl_selesai,
total_hari, total_biaya, status)
PEMBAYARAN(id_pembayaran, id_rental*, metode, jumlah, tgl_bayar)
Pertanyaan:
(a) Temukan minimal 5 masalah dalam skema ini (dari berbagai dimensi validasi)!
(b) Untuk setiap masalah, berikan saran perbaikan yang konkret!
(c) Tulis ulang skema yang sudah diperbaiki dalam notasi relasional!Lampiran E: Checklist Validasi Logical Data Model â Kartu Referensi Cepat
Gunakan tabel ini sebagai referensi cepat saat memvalidasi logical model â baik pada proyek sendiri maupun saat peer review.
| # | Dimensi | Poin Pemeriksaan | Cara Validasi |
|---|---|---|---|
| 1 | đŖ Completeness | Semua strong entity â tabel? | Silang ERD vs daftar tabel |
| 2 | đŖ Completeness | Semua weak entity â tabel PK komposit? | Periksa setiap weak entity di ERD |
| 3 | đŖ Completeness | Semua M:N â junction table? | Cari relationship M:N di ERD |
| 4 | đŖ Completeness | Multivalued attribute â tabel tersendiri? | Tandai atribut multivalued di ERD |
| 5 | đŖ Completeness | Relationship attribute â kolom di junction? | Cek setiap relationship attribute |
| 6 | đŖ Completeness | ISA hierarchy dipetakan konsisten? | Tentukan strategi (table-per-type dll.) |
| 7 | đŖ Completeness | Semua use case/query bisnis terjawab? | Tulis 3-5 query bisnis, coba formulasikan |
| 8 | đĄ Correctness | Setiap tabel punya tepat 1 PK valid? | Cek NULL, unik, stabil |
| 9 | đĄ Correctness | Total participation â FK NOT NULL? | Cek setiap relationship dengan partisipasi total |
| 10 | đĄ Correctness | Partial participation â FK boleh NULL? | Verifikasi relationship opsional |
| 11 | đĄ Correctness | ON DELETE/ON UPDATE didefinisikan? | Setiap FK perlu CASCADE/RESTRICT/SET NULL |
| 12 | đĄ Correctness | Bebas partial dependency (2NF)? | Cek tabel dengan PK komposit |
| 13 | đĄ Correctness | Bebas transitive dependency (3NF)? | Cek setiap kolom non-key |
| 14 | đĄ Correctness | Keputusan denormalisasi terdokumentasi? | Ada DDR untuk setiap pengecualian |
| 15 | đĸ Consistency | Naming convention konsisten? | snake_case semua, atau camelCase semua |
| 16 | đĸ Consistency | Tipe data domain serupa â domain sama? | Semua id_* INT? Semua tanggal DATE? |
| 17 | đĸ Consistency | FK naming convention konsisten? | id_[tabel] atau [tabel]_id |
| 18 | đĸ Consistency | Model konsisten dengan ERD sumber? | Tidak ada tabel "baru" tanpa dasar ERD |
| 19 | đĩ Usability | Nama tabel dan kolom self-explanatory? | Orang lain bisa baca tanpa penjelasan |
| 20 | đĩ Usability | Query bisnis umum ⤠5 JOIN? | Tulis query paling kompleks, hitung JOIN |
| 21 | đĩ Usability | Tidak ada tabel orphan? | Setiap tabel terhubung ke minimal 1 tabel lain |
| 22 | đĩ Usability | Data dictionary mulai dibuat? | Daftar tabel + deskripsi singkat sudah ada |
Legenda: đŖ Completeness  đĄ Correctness  đĸ Consistency  đĩ Usability
Cara penggunaan:
- Validasi mandiri: Sebelum mengumpulkan tugas, centang semua 22 poin
- Peer review: Gunakan tabel ini sebagai panduan, tandai â/â/? per poin
- Proyek semester: Sertakan tabel ini sebagai lampiran dokumen proyek (isi kolom status)
Koneksi ke Proyek Semester: Tugas peer review dan validasi pertemuan ini adalah Tahap 5 dari proyek bertahap â Validated & Reviewed Logical Model. Setelah UTS, kamu akan mengimplementasikan model ini ke dalam SQL DDL scripts (pertemuan 9). Semakin solid model di tahap ini, semakin mudah implementasi di tahap selanjutnya.
Preview Pasca-UTS (Pertemuan 9): Setelah UTS, kita masuk ke Physical Data Model â mengimplementasikan logical model ke dalam script SQL yang sesungguhnya dengan MySQL. Ini adalah langkah dari "diagram di kertas" menjadi "database yang bisa dijalankan". Pastikan logical model dari proyek sudah divalidasi dengan baik sebelum pertemuan 9!
Pesan Menjelang UTS: "Data modelling bukan tentang menghafal aturan â ini tentang mengembangkan intuisi untuk menangkap realitas bisnis dalam bentuk yang presisi dan bebas ambiguitas. Setelah pertemuan ini, kamu sudah punya fondasi yang kuat. Percayai prosesnya."
Disusun oleh: Mohammad Reza Maulana, M.Kom Program Studi Sains Data Fakultas Ekonomi dan Bisnis Islam UIN K.H. Abdurrahman Wahid Pekalongan
Revisi: Februari 2026