MODUL PERTEMUAN 5
TRANSFORMASI CONCEPTUAL MODEL KE LOGICAL MODEL
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 5
Sub-CPMK 4.1: Mahasiswa mampu menyusun model data dari tahap konseptual hingga logikal secara sistematis, dengan menerapkan algoritma mapping ERD ke skema relasional secara benar dan lengkap.
B.2 Tujuan Pembelajaran (Learning Objectives)
Setelah mengikuti pertemuan ini, mahasiswa akan mampu:
- Menjelaskan perbedaan antara conceptual model, logical model, dan physical model beserta peran masing-masing (C2 β Memahami)
- Menerapkan algoritma mapping strong entity menjadi tabel relasional (C3 β Mengaplikasikan)
- Menentukan foreign key yang tepat untuk merepresentasikan relationship 1:1 dan 1:N (C3 β Mengaplikasikan)
- Membuat junction table yang benar untuk merepresentasikan relationship M:N beserta relationship attribute-nya (C3 β Mengaplikasikan)
- Memetakan weak entity, multivalued attribute, dan hierarki ISA ke dalam tabel relasional (C3 β Mengaplikasikan)
- Menganalisis trade-off dari tiga strategi mapping hierarki ISA dan memilih yang paling tepat (C4 β Menganalisis)
B.3 Kompetensi yang Dikembangkan
| Domain | Kompetensi |
|---|---|
| Kognitif | Memahami konsep (C2), Menerapkan algoritma (C3), Menganalisis trade-off (C4) |
| Afektif | Menghargai proses transformasi yang sistematis; mengembangkan ketelitian dalam menentukan FK |
| Psikomotorik | Menuliskan skema relasional dalam notasi formal; mendokumentasikan tabel dengan data dictionary |
B.4 Indikator Pencapaian
Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:
- Menghasilkan skema tabel relasional yang benar dari sebuah ERD sederhana secara mandiri
- Menentukan di mana FK ditempatkan untuk setiap jenis relationship (1:1, 1:N, M:N)
- Membuat junction table lengkap (dengan PK komposit dan FK) untuk relationship M:N
- Memetakan weak entity ke tabel dengan PK komposit yang tepat
- Memilih dan menjustifikasi strategi mapping ISA yang paling sesuai untuk konteks bisnis tertentu
B.5 Alokasi Waktu
| No | Kegiatan | Durasi | Keterangan |
|---|---|---|---|
| 1 | Pembukaan & Review Tugas ERD Pertemuan 4 | 10 menit | Highlight pola umum ERD dari tugas mahasiswa |
| 2 | Aktivitas Pemantik: "ERD ke Tabel β Semudah itu?" | 10 menit | Eksplorasi intuisi mahasiswa |
| 3 | Materi 1: Dari Konseptual ke Logikal β Apa yang Berubah? | 15 menit | Ceramah + perbandingan dua level model |
| 4 | Materi 2: Algoritma Mapping β Strong Entity & Attribute | 20 menit | Ceramah + latihan singkat |
| 5 | Break | 10 menit | β |
| 6 | Materi 3: Mapping Relationship (1:1, 1:N, M:N, Ternary) | 25 menit | Ceramah + demonstrasi step-by-step |
| 7 | Materi 4: Mapping Weak Entity & Multivalued Attribute | 15 menit | Ceramah + contoh |
| 8 | Materi 5: Mapping Hierarki ISA β Tiga Strategi | 15 menit | Ceramah + perbandingan trade-off |
| 9 | Praktikum Terbimbing: Transform ERD Lengkap | 20 menit | Latihan individual/berpasangan |
| 10 | Review & Diskusi Hasil Praktikum | 10 menit | Pembahasan bersama, tanya jawab |
| 11 | Evaluasi, Briefing Tugas & Penutup | 10 menit | Kuis, penjelasan tugas, refleksi |
| Total | 160 menit | (termasuk fleksibilitas 10 menit) |
C. MATERI PEMBELAJARAN
C.1 Aktivitas Pemantik β "ERD ke Tabel β Semudah itu?"
Instruksi (10 menit): Dosen menampilkan ERD sederhana berikut dan meminta mahasiswa menjawab secara spontan: "Jika kalian diminta mengubah ERD ini menjadi tabel-tabel database, tabel apa saja yang akan kalian buat, dan kolom apa saja isinya?"
ERD yang Ditampilkan:

Kemungkinan jawaban spontan mahasiswa:
- "Buat 2 tabel: MAHASISWA dan MATA_KULIAH, lalu kolom Kode_MK ditaruh di MAHASISWA"
- "Buat 3 tabel: MAHASISWA, MATA_KULIAH, dan satu tabel lagi untuk hubungannya"
- "Buat 2 tabel saja, kolom NIM ditaruh di MATA_KULIAH"
Pertanyaan pemantik diskusi:
- Jika kita taruh
Kode_MKdi tabel MAHASISWA, masalah apa yang timbul jika Budi mengambil 6 MK? - Ke mana kita menyimpan
NilaidanSemesteryang ada di relationship? - Bagaimana jika ada 500 mahasiswa yang masing-masing mengambil rata-rata 6 MK β berapa baris data yang kita butuhkan?
Poin Pembelajaran: Pertemuan hari ini akan menjawab semua pertanyaan ini secara sistematis. Ada algoritma yang jelas dan dapat diikuti β kita tidak perlu menebak-nebak.
C.2 Materi 1: Dari Conceptual Model ke Logical Model β Apa yang Berubah?
C.2.1 Tiga Level Model Data β Rekap dan Posisi Hari Ini
Sepanjang pertemuan 1β4, kita sudah bergerak di level Conceptual Model. Hari ini kita melakukan lompatan penting ke level Logical Model.
LEVEL 1: CONCEPTUAL MODEL (Pertemuan 3β4)
ββββββββββββββββββββββββββββββββββββββββ
β’ Representasi: ERD (Entity, Attribute, Relationship)
β’ Fokus: APA yang perlu disimpan dan bagaimana keterkaitannya
β’ Independen dari DBMS β tidak ada tipe data, tidak ada SQL
β’ Audiens: Semua stakeholder (bisnis + teknis)
β’ Output: Diagram ERD (Chen / Crow's Foot)
β TRANSFORMASI (Pertemuan 5) β
LEVEL 2: LOGICAL MODEL (Pertemuan 5β7)
ββββββββββββββββββββββββββββββββββββββ
β’ Representasi: Skema Relasional (Tabel, Kolom, PK, FK)
β’ Fokus: BAGAIMANA struktur data diorganisir dalam model relasional
β’ Masih independen dari DBMS β tidak ada tipe data spesifik
β’ Audiens: Data modeller, database architect, developer senior
β’ Output: Daftar tabel dengan kolom, PK, FK, dan constraint
β IMPLEMENTASI (Pertemuan 9) β
LEVEL 3: PHYSICAL MODEL (Pertemuan 9)
ββββββββββββββββββββββββββββββββββββββ
β’ Representasi: DDL Script (CREATE TABLE, ALTER TABLE)
β’ Fokus: Implementasi konkret di MySQL
β’ Bergantung pada features MySQL β ada tipe data spesifik, index strategies, storage engine
β’ Audiens: DBA, developer
β’ Output: Script SQL yang langsung bisa dijalankan di MySQLC.2.2 Apa yang Berubah dari Conceptual ke Logical?
| Aspek | Conceptual Model | Logical Model |
|---|---|---|
| Entity | Kotak/rectangle dalam ERD | Tabel (relation) |
| Attribute | Oval/ellipse atau baris dalam entity | Kolom (column/field) |
| Primary Key | Identifier konseptual (digaris bawah) | Kolom PK yang eksplisit |
| Relationship | Diamond/garis dengan kardinalitas | Foreign Key atau Junction Table |
| M:N Relationship | Satu garis dengan kardinalitas M:N | Junction Table (tabel perantara) |
| Weak Entity | Double rectangle | Tabel dengan PK komposit (PK sendiri + FK) |
| Multivalued Attr. | Double oval | Tabel tersendiri |
| Derived Attribute | Dashed oval | Tidak disimpan (dihitung saat query) atau kolom tersimpan |
| ISA Hierarchy | Diagram hierarki | Pilihan dari 3 strategi tabel |
| Notasi Output | Diagram visual | Notasi relasional: TABEL(kolom1, **PK**, *FK*, ...) |
C.2.3 Notasi Skema Relasional
Dalam logical model, kita menggunakan notasi skema relasional untuk mendokumentasikan setiap tabel:
FORMAT NOTASI SKEMA RELASIONAL:
NAMA_TABEL(kolom1, kolom2, kolom3, ...)
Konvensi:
β’ Nama tabel: HURUF_KAPITAL
β’ Primary key: dicetak tebal atau digarisbawahi
β’ Foreign key: dicetak miring
β’ Kolom biasa: nama normal
CONTOH:
MAHASISWA(nim, nama, email, tgl_lahir, *prodi_id*)
^^^ ^^^^^^^^^^
PK FK
MATA_KULIAH(kode_mk, nama_mk, sks, *prodi_id*)
^^^^^^^
ENROLLMENT(**nim**, **kode_mk**, semester, nilai)
^^^^^^^^ ^^^^^^^^^^^
PK komposit (keduanya)
nim β FK ke MAHASISWA
kode_mk β FK ke MATA_KULIAHC.2.4 Konsep Referential Integrity
Sebelum mempelajari algoritma mapping, kita perlu memahami referential integrity β aturan fundamental yang menjamin konsistensi data antar tabel.
Definisi: Setiap nilai foreign key di sebuah tabel HARUS merujuk ke nilai primary key yang ada di tabel yang direferensikan, atau bernilai NULL (jika FK-nya opsional).
CONTOH:
Tabel KARYAWAN:
emp_id | nama | dept_id β FK ke DEPARTEMEN
-------|---------|--------
E001 | Budi | D001 β VALID (D001 ada di DEPARTEMEN)
E002 | Siti | D002 β VALID (D002 ada di DEPARTEMEN)
E003 | Ahmad | D999 β INVALID! D999 tidak ada di DEPARTEMEN
E004 | Dewi | NULL β Bisa VALID jika FK opsional
Tabel DEPARTEMEN:
dept_id | nama_dept
--------|----------
D001 | Keuangan
D002 | Teknologi
β DBMS akan menolak insert E003 karena melanggar referential integrity!Opsi ON DELETE dan ON UPDATE:
| Opsi | Perilaku saat data referensi dihapus/diubah | Kapan Digunakan |
|---|---|---|
RESTRICT | Tolak operasi delete/update | Default; data anak harus dihapus dulu |
CASCADE | Hapus/update otomatis semua data anak | Weak entity; data anak tidak bermakna tanpa induk |
SET NULL | Set FK menjadi NULL | Relationship opsional; anak bisa berdiri sendiri |
SET DEFAULT | Set FK ke nilai default | Jarang digunakan |
C.3 Materi 2: Algoritma Mapping β Strong Entity dan Attribute
C.3.1 Aturan Mapping 1: Strong Entity β Tabel
Langkah:
- Buat satu tabel untuk setiap strong entity
- Kolom = semua simple attribute dari entity
- Pilih satu candidate key sebagai primary key
- Composite attribute: bisa disimpan flat (tiap sub-atribut jadi kolom) atau sebagai satu kolom
CONTOH:
ERD (Conceptual):
PRODUK
βββ Kode_Produk (PK)
βββ Nama_Produk
βββ Harga
βββ Stok
βββ Alamat_Gudang (composite: Jalan, Kota, Kode_Pos)
Logical Model:
PRODUK(kode_produk, nama_produk, harga, stok,
alamat_jalan, alamat_kota, alamat_kode_pos)
^^^^^^^^^^^
PK
Atau jika alamat tidak perlu dipecah:
PRODUK(kode_produk, nama_produk, harga, stok, alamat_lengkap)Keputusan Composite Attribute:
PECAH menjadi kolom-kolom terpisah jika:
β Sub-atribut sering dicari/filter secara individual
(filter berdasarkan kota, sort berdasarkan kode_pos)
β Sub-atribut punya validasi berbeda
β Data perlu digabung dengan data lain berdasarkan sub-atribut
BIARKAN sebagai satu kolom jika:
β Selalu digunakan sebagai kesatuan (hanya tampil, tidak di-filter)
β Sub-atribut tidak punya signifikansi bisnis mandiriC.3.2 Aturan Mapping 2: Derived Attribute
Derived attribute umumnya TIDAK dibuat sebagai kolom tersimpan dalam logical model. Nilainya dihitung saat query menggunakan SQL.
CONTOH:
ERD: MAHASISWA memiliki derived attribute "Umur" (dari Tgl_Lahir)
Logical Model: TIDAK tambah kolom "umur"
MAHASISWA(nim, nama, tgl_lahir, email)
Query saat dibutuhkan:
SELECT nim, nama, YEAR(CURDATE()) - YEAR(tgl_lahir) AS umur
FROM MAHASISWA;
PENGECUALIAN β Simpan sebagai kolom jika:
β Kalkulasi sangat mahal (melibatkan jutaan row)
β Nilai perlu diakses sangat sering (performance-critical)
β Nilai historis perlu dipreservasi (mis: harga_saat_pesan di order)C.3.3 Contoh Lengkap: Mapping Beberapa Strong Entity
ERD SISTEM AKADEMIK (Conceptual):
MAHASISWA
βββ NIM (PK) PROGRAM_STUDI
βββ Nama βββ Kode_Prodi (PK)
βββ Tgl_Lahir βββ Nama_Prodi
βββ Email βββ Jenjang
βββ Alamat {Jalan, Kota}
βββ Umur (derived)
DOSEN
βββ NIP (PK)
βββ Nama
βββ Spesialisasi
βββ Email
ββββββββββββββββββββββββββββββββββββββββββββββββββ
LOGICAL MODEL:
PROGRAM_STUDI(kode_prodi, nama_prodi, jenjang)
^^^^^^^^^^^
MAHASISWA(nim, nama, tgl_lahir, email, alamat_jalan, alamat_kota, kode_prodi*)
^^^ ^^^^^^^^^^^
PK FK ke PROGRAM_STUDI
(umur TIDAK disimpan β dihitung dari tgl_lahir)
DOSEN(nip, nama, spesialisasi, email)
^^^
PKC.4 Materi 3: Mapping Relationship
C.4.1 Aturan Mapping 3: Relationship 1:N
Untuk relationship 1:N, foreign key ditempatkan di sisi "many" (N), merujuk ke primary key sisi "one" (1).
PRINSIP: "Sisi banyak menyimpan referensi ke sisi satu."
CONTOH 1 β DEPARTEMEN memiliki banyak KARYAWAN:
ERD:
DEPARTEMEN (1) ββββ (N) KARYAWAN
Logical Model:
DEPARTEMEN(dept_id, nama_dept, lokasi)
^^^^^^^
KARYAWAN(emp_id, nama, jabatan, gaji, dept_id*)
^^^^^^ ^^^^^^^
PK FK β DEPARTEMEN(dept_id)
Mengapa FK di KARYAWAN (sisi N)?
β Setiap KARYAWAN hanya berada di SATU departemen
β Cukup satu kolom FK
β Jika FK di DEPARTEMEN (sisi 1), kita butuh array untuk menyimpan
banyak emp_id β tidak mungkin di model relasional!
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 2 β Relationship 1:N dengan Relationship Attribute:
ERD:
PENULIS (1) ββββ (N) BUKU Relationship: "menulis"
(tidak ada relationship attribute di sini; Buku adalah "milik" Penulis)
Logical Model:
PENULIS(penulis_id, nama, email)
^^^^^^^^^^
BUKU(isbn, judul, tahun_terbit, penulis_id*)
^^^^ ^^^^^^^^^^^
PK FK β PENULIS(penulis_id)Bagaimana dengan Participation Constraint?
TOTAL PARTICIPATION (mandatory) β kolom FK harus NOT NULL
PARTIAL PARTICIPATION (optional) β kolom FK boleh NULL
CONTOH:
"Setiap KARYAWAN harus berada di satu DEPARTEMEN" (total participation)
β dept_id NOT NULL
"KARYAWAN boleh belum memiliki MANAJER" (partial participation, unary rel.)
β manajer_id NULL (boleh kosong)
KARYAWAN(emp_id, nama, dept_id* NOT NULL, manajer_id* NULL)C.4.2 Aturan Mapping 4: Relationship M:N β Junction Table
Relationship M:N tidak bisa direpresentasikan langsung dengan satu FK saja. Kita perlu membuat junction table (juga disebut: bridge table, associative table, atau cross-reference table).
PRINSIP: "M:N selalu menghasilkan tabel baru (junction table)."
ALGORITMA:
1. Buat tabel baru untuk relationship tersebut
2. Tabel berisi FK ke kedua entity yang terlibat
3. Primary key tabel junction = kombinasi (komposit) dari kedua FK
4. Tambahkan relationship attribute sebagai kolom biasa
CONTOH 1 β MAHASISWA mengambil MATA_KULIAH (M:N):
ERD:
MAHASISWA (M) ββmengambilββ (N) MATA_KULIAH
Rel. Attr: Nilai, Semester
Logical Model:
MAHASISWA(nim, nama, email)
^^^
MATA_KULIAH(kode_mk, nama_mk, sks)
^^^^^^^
PENGAMBILAN(nim*, kode_mk*, semester, nilai)
^^^ ^^^^^^^
PK komposit (nim + kode_mk)
nim β FK ke MAHASISWA
kode_mk β FK ke MATA_KULIAH
semester & nilai β kolom dari relationship attribute
CATATAN:
Jika satu mahasiswa bisa mengambil MK yang sama di semester berbeda,
maka PK-nya perlu ditambah semester:
PENGAMBILAN(nim*, kode_mk*, semester*, nilai)
β PK komposit: (nim, kode_mk, semester) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 2 β DOKTER menangani PASIEN (M:N):
ERD:
DOKTER (M) ββmenanganiββ (N) PASIEN
Rel. Attr: Tanggal_Kunjungan, Diagnosa, Biaya
Logical Model:
DOKTER(nip, nama, spesialisasi)
^^^
PASIEN(no_rm, nama, tgl_lahir, goldar)
^^^^^
KUNJUNGAN(nip*, no_rm*, tgl_kunjungan*, diagnosa, biaya)
^^^ ^^^^^ ^^^^^^^^^^^^^
PK komposit: (nip, no_rm, tgl_kunjungan)
nip β FK ke DOKTER
no_rm β FK ke PASIEN
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 3 β PRODUK dikategorikan di KATEGORI (M:N, tanpa rel. attribute):
ERD:
PRODUK (M) ββdikategorikan_diββ (N) KATEGORI
Logical Model:
PRODUK(produk_id, nama, harga, stok)
^^^^^^^^^
KATEGORI(kategori_id, nama_kategori)
^^^^^^^^^^^
PRODUK_KATEGORI(produk_id*, kategori_id*)
^^^^^^^^^ ^^^^^^^^^^^
PK komposit
β FK ke PRODUK dan KATEGORIKapan Junction Table Butuh Surrogate Key Sendiri?
Meski umumnya PK komposit sudah cukup, ada situasi di mana junction table butuh surrogate key:
SITUASI 1: Junction table dirujuk oleh tabel lain sebagai FK
β Lebih mudah jika ada single-column PK
Contoh: KUNJUNGAN (junction DOKTER-PASIEN) dirujuk oleh RESEP_OBAT
KUNJUNGAN(kunjungan_id, nip*, no_rm*, tgl_kunjungan, diagnosa)
^^^^^^^^^^^^ β surrogate PK
RESEP_OBAT(resep_id, kunjungan_id*, kode_obat*, dosis, jumlah)
SITUASI 2: Composite PK akan terlalu panjang dan sulit dikelola
β Pertimbangkan surrogate key untuk kemudahan
SITUASI 3: Kompatibilitas dengan framework ORM
β Beberapa framework mensyaratkan single-column PKC.4.3 Aturan Mapping 5: Relationship 1:1
Relationship 1:1 memiliki fleksibilitas lebih β FK bisa ditaruh di salah satu tabel. Pilihan terbaik bergantung pada participation constraint.
TIGA OPSI MAPPING 1:1:
OPSI A: FK di tabel yang memiliki total participation
β Entity yang wajib memiliki pasangan menyimpan FK
OPSI B: Gabungkan menjadi satu tabel
β Jika kedua entity sangat erat dan selalu diakses bersama
OPSI C: FK bisa di salah satu tabel (jika keduanya partial)
β Pilih yang lebih "natural" secara bisnis
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH β KARYAWAN (partial) ββ memiliki ββ MOBIL_DINAS (total):
"Setiap MOBIL_DINAS pasti dimiliki oleh tepat satu KARYAWAN"
"KARYAWAN boleh tidak punya MOBIL_DINAS"
Participation: KARYAWAN = partial, MOBIL_DINAS = total
OPSI TERBAIK: FK di MOBIL_DINAS (sisi total participation)
Alasan: MOBIL_DINAS pasti punya pemilik β FK tidak boleh NULL
KARYAWAN(emp_id, nama, jabatan, gaji)
^^^^^^
MOBIL_DINAS(plat_nomor, merek, tahun, emp_id* NOT NULL)
^^^^^^^^^^ ^^^^^^
PK FK β KARYAWAN (total, NOT NULL)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH β Merge menjadi satu tabel (MAHASISWA dan PROFIL_MAHASISWA):
ERD: MAHASISWA (1:1) PROFIL_MAHASISWA
Jika profil selalu ada dan selalu diakses bersama data mahasiswa:
MAHASISWA(nim, nama, email, tgl_lahir, foto_url, bio, hobi)
^^^
β atribut MAHASISWA dan PROFIL_MAHASISWA digabung βC.4.4 Aturan Mapping 6: Relationship Ternary
Relationship ternary (melibatkan 3 entity) dipetakan menjadi satu junction table dengan tiga FK.
CONTOH β DOSEN mengajar MATA_KULIAH di RUANGAN (ternary):
ERD:
DOSEN βββ
βββ "mengajar_di" ββββ (satu fakta mengajar)
MATA_KULIAH βββ€
β
RUANGAN βββ
Rel. Attr: Hari, Jam_Mulai, Jam_Selesai
Logical Model:
DOSEN(nip, nama)
^^^
MATA_KULIAH(kode_mk, nama_mk, sks)
^^^^^^^
RUANGAN(kode_ruang, kapasitas, gedung)
^^^^^^^^^^
JADWAL(nip*, kode_mk*, kode_ruang*, hari, jam_mulai, jam_selesai)
^^^ ^^^^^^^ ^^^^^^^^^^
PK komposit: (nip, kode_mk, kode_ruang)
β atau tambahkan surrogate key jika PK terlalu panjang
β bisa juga PK: (nip, kode_mk, hari, jam_mulai) tergantung business rule
PERTIMBANGAN PK:
Apa yang membuat satu jadwal unik?
"Satu dosen bisa mengajar MK yang sama di ruang berbeda? Atau jam berbeda?"
β Jawaban dari business rules menentukan komposisi PKC.4.5 Aturan Mapping 7: Unary Relationship (Self-Referencing)
CONTOH 1 β Unary 1:N β KARYAWAN menjadi atasan KARYAWAN lain:
ERD: KARYAWAN ββββ "menjadi atasan dari" ββββ KARYAWAN (unary)
Logical Model:
KARYAWAN(emp_id, nama, jabatan, manajer_id*)
^^^^^^ ^^^^^^^^^^
PK FK ke KARYAWAN(emp_id) β self-referencing!
NULL jika tidak punya atasan (CEO)
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 2 β Unary M:N β MATA_KULIAH menjadi prasyarat MATA_KULIAH lain:
ERD: MATA_KULIAH ββββ "prasyarat dari" ββββ MATA_KULIAH (unary M:N)
Logical Model:
MATA_KULIAH(kode_mk, nama_mk, sks)
^^^^^^^
MK_PRASYARAT(kode_mk*, kode_mk_prasyarat*)
^^^^^^^ ^^^^^^^^^^^^^^^^^
PK komposit
kode_mk β FK ke MATA_KULIAH (MK yang membutuhkan)
kode_mk_prasyarat β FK ke MATA_KULIAH (MK yang harus diselesaikan dulu)
Contoh data:
| kode_mk | kode_mk_prasyarat | β "MK SSD2034 membutuhkan SSD1019 sebagai prasyarat"
| SSD2034 | SSD1019 |
| SSD3015 | SSD2034 |Koneksi ke Pertemuan 12 (Data Warehouse): Junction table ternary yang menggunakan surrogate key akan sangat relevan saat kita merancang tabel fakta di dimensional model. Di P12, kita akan melihat bahwa tabel fakta pada dasarnya adalah very large junction table β ia berisi foreign key ke semua dimensi (SIAPA, APA, KAPAN, DI MANA) plus ukuran numeris (measures). Pemahaman tentang surrogate key dan PK komposit di junction table ternary ini adalah fondasi untuk memahami mengapa tabel fakta dirancang seperti itu. Ingat kembali: di P12, setiap FK di tabel fakta merujuk ke surrogate key dimensi β persis seperti junction table ternary yang menggunakan surrogate PK dari setiap entity peserta.
C.5 Materi 4: Mapping Weak Entity dan Multivalued Attribute
C.5.1 Aturan Mapping 8: Weak Entity
Weak entity dipetakan menjadi tabel dengan PK komposit yang terdiri dari partial key miliknya sendiri ditambah FK ke tabel identifying entity.
PRINSIP: "PK Weak Entity = Partial Key + FK ke Identifying Entity"
CONTOH 1 β PESANAN memiliki ITEM_PESANAN (weak):
ERD:
PESANAN (1) ββββ[berisi]ββββ (N) ITEM_PESANAN (weak)
identifying rel. Partial key: nomor_item
Attr: qty, harga_saat_pesan
Logical Model:
PESANAN(pesanan_id, tanggal, status, total_bayar, pembeli_id*)
^^^^^^^^^^
ITEM_PESANAN(pesanan_id*, nomor_item*, qty, harga_saat_pesan, produk_id*)
^^^^^^^^^^ ^^^^^^^^^^
PK komposit: (pesanan_id, nomor_item)
pesanan_id β FK ke PESANAN (CASCADE DELETE)
produk_id β FK ke PRODUK
ON DELETE CASCADE: Jika PESANAN dihapus β semua ITEM_PESANAN ikut terhapus
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 2 β GEDUNG memiliki RUANGAN (weak):
ERD:
GEDUNG (1) ββββββ[memiliki]βββ (N) RUANGAN (weak)
Partial key RUANGAN: nomor_ruang
Attr: kapasitas, fasilitas
Logical Model:
GEDUNG(gedung_id, nama_gedung, alamat, jumlah_lantai)
^^^^^^^^^
RUANGAN(gedung_id*, nomor_ruang*, kapasitas, fasilitas)
^^^^^^^^^ ^^^^^^^^^^^
PK komposit: (gedung_id, nomor_ruang)
gedung_id β FK ke GEDUNG (CASCADE DELETE)
"Ruang 101 Gedung A" β "Ruang 101 Gedung B" β identitas berbeda meski nomor samaC.5.2 Aturan Mapping 9: Multivalued Attribute
Multivalued attribute tidak bisa disimpan sebagai satu kolom di tabel utama. Solusinya adalah membuat tabel tersendiri untuk menyimpan nilai-nilai tersebut.
PRINSIP: "Setiap multivalued attribute menjadi tabel tersendiri."
CONTOH 1 β DOSEN memiliki Keahlian (multivalued):
ERD:
DOSEN(nip, nama, {keahlian})
multivalued: Python, SQL, R, Machine Learning
Logical Model:
DOSEN(nip, nama, email)
^^^
DOSEN_KEAHLIAN(nip*, keahlian)
^^^ ^^^^^^^^
PK: (nip, keahlian) β satu dosen tidak bisa punya keahlian duplikat
nip β FK ke DOSEN (CASCADE DELETE)
Contoh data:
| nip | keahlian |
| D001 | Python |
| D001 | Machine Learning|
| D001 | SQL |
| D002 | R |
| D002 | Statistika |
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
CONTOH 2 β PRODUK memiliki Foto (multivalued):
ERD:
PRODUK(produk_id, nama, {url_foto})
Logical Model:
PRODUK(produk_id, nama, harga, stok)
^^^^^^^^^
PRODUK_FOTO(foto_id, produk_id*, url_foto, urutan, keterangan)
^^^^^^^ ^^^^^^^^^
PK: foto_id (surrogate, karena urutan bisa berubah)
produk_id β FK ke PRODUK (CASCADE DELETE)
Catatan: Di sini kita pakai surrogate PK (foto_id) karena:
β URL bisa berubah
β Perlu menyimpan urutan tampil foto
β foto_id memudahkan jika ada operasi "ubah urutan" atau "hapus satu foto"C.6 Materi 5: Mapping Hierarki ISA β Tiga Strategi
Hierarki ISA (generalisasi/spesialisasi) memiliki tiga strategi mapping yang berbeda, masing-masing dengan trade-off tersendiri.
CONTOH HIERARKI ISA YANG AKAN DIMAPPING:
ORANG (supertype)
βββ NIP_atau_NIM (PK)
βββ Nama
βββ Email
βββ Tgl_Lahir
ISA {disjoint, partial}
ββββββββββββββββββββββββββ
β β
MAHASISWA (subtype) DOSEN (subtype)
βββ NIM βββ NIP
βββ Prodi βββ Spesialisasi
βββ Tahun_Masuk βββ Jabatan_FungsionalC.6.1 Strategi A: Satu Tabel untuk Semua (Single Table Inheritance)
Ide: Buat satu tabel tunggal yang menggabungkan semua atribut supertype dan semua subtype. Tambahkan kolom discriminator untuk menandai tipe setiap record.
STRATEGI A β SINGLE TABLE:
ORANG(id_orang, nama, email, tgl_lahir, tipe_orang,
nim, prodi, tahun_masuk, β atribut MAHASISWA
nip, spesialisasi, jabatan_fungsional) β atribut DOSEN
^^^^^^^^
PK
tipe_orang: "MAHASISWA" | "DOSEN" | NULL (jika orang biasa)
Contoh Data:
| id | nama | tipe | nim | nip | prodi | spesialisasi |
| 001 | Budi | MAHASISWA | 2021001001 | NULL | Saindata | NULL |
| 002 | Dewi | DOSEN | NULL | D001 | NULL | Machine Lrn |
| 003 | Reza | NULL | NULL | NULL | NULL | NULL |
KEUNTUNGAN:
β Query paling sederhana (tidak perlu JOIN)
β Performa tinggi untuk query yang menyangkut semua tipe
β Mudah menambah subtype baru (hanya tambah kolom)
KERUGIAN:
β Banyak nilai NULL (kolom mahasiswa NULL untuk dosen, dan sebaliknya)
β Tidak bisa enforce NOT NULL untuk atribut subtype
β Tabel menjadi besar dan "gemuk"
β Sulit memahami skema karena campur aduk
COCOK UNTUK:
β Jumlah subtype sedikit
β Atribut subtype tidak banyak
β Query sering mengambil semua tipe sekaligus
β Sistem yang tidak ketat validasinyaC.6.2 Strategi B: Tabel Supertype + Tabel Subtype (Class Table Inheritance)
Ide: Buat satu tabel untuk supertype, dan satu tabel terpisah untuk setiap subtype. Tabel subtype memiliki FK ke tabel supertype (PK-nya sama).
STRATEGI B β SUPERTYPE + SUBTYPE TABLES:
ORANG(id_orang, nama, email, tgl_lahir)
^^^^^^^^^ β PK (surrogate)
MAHASISWA(id_orang*, nim, prodi, tahun_masuk)
^^^^^^^^^
PK sekaligus FK ke ORANG (shared PK)
β Setiap MAHASISWA pasti ada di tabel ORANG
β MAHASISWA tidak punya ID sendiri β ID-nya sama dengan di ORANG
DOSEN(id_orang*, nip, spesialisasi, jabatan_fungsional)
^^^^^^^^^
PK sekaligus FK ke ORANG (shared PK)
Contoh Data:
ORANG: | id | nama | email | tgl_lahir |
| 001 | Budi | budi@email.com | 2003-01-15 |
| 002 | Dewi | dewi@email.com | 1985-06-10 |
MAHASISWA: | id_orang | nim | prodi | thn_masuk |
| 001 | 2021001001 | Saindata | 2021 |
DOSEN: | id_orang | nip | spesialisasi | jabatan |
| 002 | D001 | ML | Asisten Ahli |
Query "Ambil semua data mahasiswa beserta informasi pribadinya":
SELECT o.nama, o.email, m.nim, m.prodi
FROM ORANG o
JOIN MAHASISWA m ON o.id_orang = m.id_orang;
KEUNTUNGAN:
β Tidak ada NULL yang tidak perlu
β Bisa enforce constraint per subtype
β Struktur mencerminkan hierarki dengan baik
β Mudah menambah/mengubah subtype tanpa merusak tabel lain
KERUGIAN:
β Query memerlukan JOIN (sedikit lebih lambat)
β Insert memerlukan insert ke dua tabel (transaksi)
β Lebih kompleks untuk developer
COCOK UNTUK:
β Hierarki ISA yang jelas dan stabil
β Subtype memiliki banyak atribut unik
β Validasi per-subtype penting
β Sistem yang sering mengakses data subtype secara terpisahC.6.3 Strategi C: Hanya Tabel Subtype (Concrete Table Inheritance)
Ide: Tidak ada tabel supertype. Setiap subtype menjadi tabel sendiri yang "mewarisi" langsung semua atribut supertype (disalin ke tabel masing-masing).
STRATEGI C β HANYA TABEL SUBTYPE:
MAHASISWA(nim, nama, email, tgl_lahir, prodi, tahun_masuk)
^^^ β atribut nama, email, tgl_lahir disalin dari ORANG
PK
DOSEN(nip, nama, email, tgl_lahir, spesialisasi, jabatan_fungsional)
^^^ β atribut yang sama disalin ke tabel ini juga
PK
Tidak ada tabel ORANG!
Contoh Data:
MAHASISWA: | nim | nama | email | prodi | thn_masuk |
| 2021001001 | Budi | budi@email.com | Saindata | 2021 |
DOSEN: | nip | nama | email | spesialisasi | jabatan |
| D001 | Dewi | dewi@email.com | ML | Asisten Ahli |
KEUNTUNGAN:
β Query paling sederhana per subtype (tidak perlu JOIN)
β Performa tinggi untuk query yang hanya menyangkut satu subtype
β Setiap tabel "self-contained" dan mudah dipahami sendiri
KERUGIAN:
β Duplikasi definisi kolom (nama, email, tgl_lahir ada di semua tabel)
β Sulit query "semua orang" (butuh UNION dari semua tabel)
β Perubahan atribut supertype harus diubah di semua tabel subtype
β Tidak bisa ada orang yang bukan mahasiswa maupun dosen
COCOK UNTUK:
β Subtype sangat berbeda satu sama lain
β Query hampir selalu ke satu subtype saja
β Hierarki partial specialization (boleh ada instance yang tidak punya subtype β tapi di strategi ini tidak bisa ditampung!)
β Kasus sederhana dengan sedikit subtypeC.6.4 Perbandingan Ketiga Strategi
ββββββββββββββββββββ¦βββββββββββββββ¦βββββββββββββββ¦βββββββββββββββ
β Kriteria β Strategi A β Strategi B β Strategi C β
β β Single Table β Super+Sub β Sub Only β
β βββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ£
β NULL Values β Banyak β Tidak ada β Tidak ada β
β JOIN diperlukan β Tidak β Ya (selalu) β Tidak β
β Constraint β Lemah β Kuat β Sedang β
β Fleksibilitas β Tinggi β Sedang β Rendah β
β Query semua tipe β Mudah β Perlu JOIN β Perlu UNION β
β Query satu tipe β Perlu filter β Perlu JOIN β Sangat mudah β
β Update atribut β 1 tempat β 2 tempat β N tempat β
β Tambah subtype β Tambah kolom β Tambah tabel β Tambah tabel β
β Integritas β Lemah β Kuat β Sedang β
β βββββββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ¬βββββββββββββββ£
β REKOMENDASI β Subtype β Hierarki β Subtype β
β β mirip satu β penting & β sangat β
β β sama lain β banyak data β berbeda β
ββββββββββββββββββββ©βββββββββββββββ©βββββββββββββββ©βββββββββββββββTip Praktis: Di industri, Strategi B (Supertype + Subtype) adalah yang paling umum karena menawarkan keseimbangan antara fleksibilitas dan integritas. Namun, untuk sistem analitik atau reporting-heavy, kadang Strategi A lebih disukai karena query lebih sederhana.
C.7 Rangkuman Algoritma Lengkap: 9 Aturan Mapping ERD β Relasional
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ALGORITMA MAPPING ERD β LOGICAL MODEL (9 ATURAN) β
β βββββββ¦ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β No β Komponen ERD β Aksi β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 1 β STRONG ENTITY β Tabel baru β
β β Atribut β Kolom; PK konseptual β PK tabel β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 2 β DERIVED ATTRIBUTE β Tidak dibuat kolom (dihitung query) β
β β (Kecuali ada alasan performa/historis) β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 3 β RELATIONSHIP 1:N β FK di sisi "many" β
β β Total participation β FK NOT NULL β
β β Partial participation β FK NULL OK β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 4 β RELATIONSHIP M:N β Junction table baru β
β β PK junction = FK1 + FK2 (+ rel. attribute jika ada) β
β β Relationship attribute β kolom di junction table β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 5 β RELATIONSHIP 1:1 β FK di sisi total participation β
β β Atau gabung menjadi satu tabel jika sangat erat β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 6 β TERNARY RELATIONSHIP β Junction table dengan 3 FK β
β β PK junction = kombinasi ketiga FK β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 7 β UNARY RELATIONSHIP β Self-referencing FK β
β β M:N unary β Junction table self-referencing β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 8 β WEAK ENTITY β Tabel baru β
β β PK = Partial Key + FK ke identifying entity β
β β ON DELETE CASCADE dari identifying entity β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 9 β MULTIVALUED ATTRIBUTE β Tabel baru β
β β PK = FK ke entity utama + nilai atribut β
β βββββββ¬ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ£
β 10 β ISA HIERARCHY β Pilih satu dari tiga strategi: β
β β A: Single table (discriminator column) β
β β B: Supertype + subtype tables (shared PK) β
β β C: Subtype tables only (duplikasi atribut) β
ββββββββ©ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββC.8 Studi Kasus Komprehensif: Mapping ERD Sistem Akademik ke Logical Model
C.8.1 ERD Sistem Akademik (Conceptual)
Entity dan Relationship:
PROGRAM_STUDI (kode_prodi PK, nama_prodi, jenjang)
MAHASISWA (nim PK, nama, tgl_lahir, email, \{nomor_hp\}, umur/derived)
β berada_di PROGRAM_STUDI (N:1)
DOSEN (nip PK, nama, email, spesialisasi)
β bergabung_di PROGRAM_STUDI (N:1)
MATA_KULIAH (kode_mk PK, nama_mk, sks)
β ditawarkan_oleh PROGRAM_STUDI (N:1)
β prasyarat_dari MATA_KULIAH (unary M:N)
JADWAL (weak entity, partial key: (hari, jam_mulai), kapasitas)
β identifying: MATA_KULIAH memiliki JADWAL (1:N)
β DOSEN mengampu JADWAL (1:N)
ENROLLMENT: MAHASISWA mengambil JADWAL (M:N)
β rel. attr: tahun_akademik, semester, nilaiC.8.2 Logical Model Hasil Mapping
PROGRAM_STUDI(kode_prodi, nama_prodi, jenjang)
^^^^^^^^^^^
MAHASISWA(nim, nama, tgl_lahir, email, kode_prodi*)
^^^ ^^^^^^^^^^^
PK FK β PROGRAM_STUDI (NOT NULL, Aturan 3)
(umur tidak disimpan, Aturan 2)
MAHASISWA_HP(nim*, nomor_hp)
^^^ ^^^^^^^^
PK: (nim, nomor_hp) β Aturan 9: multivalued attribute
nim β FK ke MAHASISWA (CASCADE)
DOSEN(nip, nama, email, spesialisasi, kode_prodi*)
^^^ ^^^^^^^^^^^
PK FK β PROGRAM_STUDI (NOT NULL)
MATA_KULIAH(kode_mk, nama_mk, sks, kode_prodi*)
^^^^^^^ ^^^^^^^^^^^
PK FK β PROGRAM_STUDI (NOT NULL)
MK_PRASYARAT(kode_mk*, kode_mk_prasyarat*)
^^^^^^^ ^^^^^^^^^^^^^^^^^
PK: (kode_mk, kode_mk_prasyarat) β Aturan 7: unary M:N
kode_mk β FK ke MATA_KULIAH
kode_mk_prasyarat β FK ke MATA_KULIAH
JADWAL(kode_mk*, hari*, jam_mulai*, jam_selesai, kapasitas, nip*)
^^^^^^^ ^^^^ ^^^^^^^^^ ^^^
PK: (kode_mk, hari, jam_mulai) β Aturan 8: weak entity
kode_mk β FK ke MATA_KULIAH (CASCADE)
nip β FK ke DOSEN (NOT NULL)
ENROLLMENT(nim*, kode_mk*, hari*, jam_mulai*, tahun_akademik*, semester, nilai)
^^^ ^^^^^^^ ^^^^ ^^^^^^^^^ ^^^^^^^^^^^^^^^
PK: (nim, kode_mk, hari, jam_mulai, tahun_akademik) β Aturan 4: M:N
nim β FK ke MAHASISWA
(kode_mk, hari, jam_mulai) β FK ke JADWALC.8.3 Notasi Skema Lengkap
PROGRAM_STUDI(kode_prodi, nama_prodi, jenjang)
MAHASISWA(nim, nama, tgl_lahir, email, *kode_prodi)
MAHASISWA_HP(*nim, nomor_hp)
DOSEN(nip, nama, email, spesialisasi, *kode_prodi)
MATA_KULIAH(kode_mk, nama_mk, sks, *kode_prodi)
MK_PRASYARAT(*kode_mk, *kode_mk_prasyarat)
JADWAL(*kode_mk, hari, jam_mulai, jam_selesai, kapasitas, *nip)
ENROLLMENT(*nim, *kode_mk, *hari, *jam_mulai, *tahun_akademik, semester, nilai)
Notasi: * = bagian dari PK (bold/underline), kata miring = FK
Total: 8 tabel dari ERD yang memiliki 4 strong entity, 1 weak entity,
1 multivalued attribute, 1 unary M:N, dan 1 M:N relationshipD. PRAKTIKUM TERBIMBING
Panduan: Untuk mengerjakan praktikum ini, gunakan Lampiran A (Lembar Kerja Praktikum) dan Lampiran B (Cheat Sheet Algoritma Mapping) sebagai panduan langkah demi langkah. Referensi materi di bagian C jika butuh penjelasan lebih detail untuk setiap aturan.
D.1 Latihan: Tentukan Aturan Mapping yang Digunakan (Berpasangan, 10 menit)
Untuk setiap komponen ERD berikut, tentukan aturan mapping (1β10) yang harus diterapkan dan hasilnya dalam bentuk skema relasional:
| No | Komponen ERD | Aturan yang Digunakan | Hasil (Skema Relasional) |
|---|---|---|---|
| 1 | Entity PELANGGAN (id, nama, email) | ? | ? |
| 2 | Atribut usia (derived dari tgl_lahir) di PELANGGAN | ? | ? |
| 3 | PESANAN (N) ββ milik ββ PELANGGAN (1) | ? | ? |
| 4 | PENULIS (M) ββ menulis ββ BUKU (N), rel. attr: tahun_kontrak | ? | ? |
| 5 | KARYAWAN (partial) ββ memimpin ββ PROYEK (total), 1:1 | ? | ? |
| 6 | RUANGAN (weak entity dari GEDUNG), partial key: nomor_ruang | ? | ? |
| 7 | MAHASISWA memiliki {nomor_hp} (multivalued) | ? | ? |
| 8 | KARYAWAN ββ menjadi atasan dari ββ KARYAWAN (unary 1:N) | ? | ? |
D.2 Praktikum: Transform ERD Klinik "Medika Prima" ke Logical Model (Individual, 20 menit)
Konteks: Di pertemuan 4, kamu sudah menggambar ERD untuk Klinik "Medika Prima". Sekarang transformasikan ERD tersebut ke dalam skema relasional menggunakan 9 aturan mapping yang telah dipelajari.
Instruksi Pengerjaan: Lengkapi Lampiran A (Lembar Kerja Praktikum) dengan langkah-langkah berikut. Gunakan Lampiran B (Cheat Sheet) sebagai referensi cepat untuk setiap aturan mapping.
ERD yang Digunakan (hasil pertemuan 4):
DOKTER (strong): ID_Dokter (PK), Nama, Email, No_STR
SPESIALISASI (strong): ID_Spesialis (PK), Nama_Spesialisasi
PASIEN (strong): No_RM (PK), Nama, Tgl_Lahir, JK, Alamat, {No_HP}
KUNJUNGAN (strong): ID_Kunjungan (PK), Tanggal, Keluhan, Diagnosa, Biaya
RESEP_ITEM (weak dari KUNJUNGAN): nomor_item (partial key), Dosis, Aturan_Pakai, Jumlah
OBAT (strong): ID_Obat (PK), Nama_Obat, Satuan, Harga, Stok
Relationship:
DOKTER (M) ββ terdaftar_di ββ (N) SPESIALISASI [M:N]
DOKTER (1) ββ menangani ββββ (N) KUNJUNGAN [1:N, total dari KUNJUNGAN]
PASIEN (1) ββ melakukan ββββ (N) KUNJUNGAN [1:N, total dari KUNJUNGAN]
KUNJUNGAN (1) ββ memiliki ββ (N) RESEP_ITEM [identifying rel., weak entity]
OBAT (1) ββ diresepkan_di ββ (N) RESEP_ITEM [1:N, total dari RESEP_ITEM]Langkah Pengerjaan:
LANGKAH 1: Daftar semua tabel yang akan dibuat dan aturan yang digunakan
β Gunakan Bagian 1 di Lampiran A
Tabel | Berasal dari | Aturan Mapping
---------------------|-------------------------|-------
DOKTER | Strong entity DOKTER | Aturan 1
SPESIALISASI | Strong entity | Aturan 1
PASIEN | Strong entity | Aturan 1
PASIEN_HP | Multivalued attribute | Aturan 9
KUNJUNGAN | Strong entity | Aturan 1
RESEP_ITEM | Weak entity dari KUNJUNGAN | Aturan 8
OBAT | Strong entity | Aturan 1
DOKTER_SPESIALISASI | M:N DOKTER-SPESIALISASI | Aturan 4
KUNJUNGAN_RESEP_OBAT | M:N (KUNJUNGAN-OBAT) | Aturan 4
LANGKAH 2: Tulis skema relasional lengkap setiap tabel
β Gunakan Bagian 2 di Lampiran A
(kolom, PK, FK, NOT NULL constraint)
Contoh format: TABEL(kolom1, **PK**, *FK*, kolom_lain)
LANGKAH 3: Daftar semua Foreign Key dengan detail
β Gunakan Bagian 3 di Lampiran A
(Tabel, Kolom FK, Referensi, ON DELETE)
LANGKAH 4: Verifikasi menggunakan checklist
β Gunakan Lampiran D (Checklist Validasi Logical Model)
Pastikan semua item checklist terpenuhi sebelum submit.E. EVALUASI DAN PENILAIAN
E.1 Kuis Penutup (10 menit, bobot partisipasi)
-
Jelaskan mengapa relationship M:N tidak bisa direpresentasikan hanya dengan menambahkan FK di salah satu tabel. Apa masalah yang timbul jika kita coba lakukan itu?
-
Diberikan ERD:
PELAJAR (1) ββ mengikuti ββ (N) KURSUS_ONLINE. Business rule: "Setiap pelajar harus terdaftar di minimal satu kursus". Di mana FK ditempatkan? Apakah FK tersebut NULL atau NOT NULL? Jelaskan! -
Sebuah weak entity
BARIS_INVOICEbergantung padaINVOICE. Partial key-nya adalahnomor_baris. Tuliskan skema relasional lengkap untuk BARIS_INVOICE! -
Dari hierarki ISA:
KENDARAAN β {MOBIL, MOTOR}dengan constraint{disjoint, total}, strategi mana (A, B, atau C) yang paling tepat? Jelaskan alasannya! -
Apa perbedaan antara junction table hasil mapping M:N dengan weak entity? Keduanya sama-sama menggunakan PK komposit β apa yang membedakan keduanya secara konsep?
E.2 Tugas Mapping (dikumpulkan sebelum pertemuan 6)
Judul: Transformasi ERD ke Logical Model
Konteks: Tugas ini adalah kelanjutan langsung dari tugas ERD pertemuan 4. Mahasiswa mentransformasi ERD yang sudah dibuat menjadi skema relasional lengkap.
Panduan Lampiran untuk Tugas ini: β’ Lampiran A (Bagian 4 β Keputusan Desain) β Gunakan sebagai template format untuk output Bagian 3 (Keputusan Desain) β’ Lampiran B (Cheat Sheet) β Referensi cepat 9 aturan mapping saat mengerjakan mapping domain kamu β’ Lampiran C (Template Data Dictionary) β Template utama untuk output Bagian 1 (Skema Relasional) dan Bagian 2 (Daftar FK) β’ Lampiran D (Checklist Validasi) β Gunakan sebelum submit untuk memverifikasi kelengkapan
Ketentuan Output:
Bagian 1: Skema Relasional (deliverable utama)
- Tulis skema relasional untuk semua tabel dalam format:
NAMA_TABEL(kolom1, **PK**, *FK*, kolom_biasa, ...) - Tandai dengan jelas: PK (tebal/underline), FK (miring/asterisk), dan kolom NULL vs NOT NULL
- Setiap tabel harus disertai komentar singkat: "Berasal dari [apa] menggunakan Aturan [no]"
- Acuan: Gunakan Lampiran C (Template Data Dictionary) β isi satu blok per tabel mengikuti strukturnya
Bagian 2: Daftar Foreign Key Lengkap
| Tabel | Kolom FK | Merujuk ke Tabel | Merujuk ke Kolom | ON DELETE | Alasan |
|---|---|---|---|---|---|
| CASCADE/RESTRICT/SET NULL |
- Acuan: Gunakan bagian FOREIGN KEYS di Lampiran C β format-nya sudah mencakup ON DELETE dan alasan
Bagian 3: Keputusan Desain (minimal 3 keputusan)
- Untuk setiap keputusan desain yang tidak trivial, jelaskan:
- Situasi/dilema yang dihadapi
- Pilihan yang dibuat
- Alasan/justifikasi
- Acuan: Gunakan format dari Lampiran A (Bagian 4 β Keputusan Desain): tulis Dilema / Pilihan / Alasan untuk setiap keputusan
Contoh keputusan yang perlu didokumentasikan:
- "Apakah atribut X perlu disimpan atau cukup dihitung?"
- "Untuk ISA hierarchy Y, strategi mana yang dipilih dan mengapa?"
- "Untuk junction table Z, apakah PK komposit cukup atau perlu surrogate key?"
Bagian 4: Reflection (setengah halaman)
- Apa langkah mapping yang paling menantang dalam domain yang kamu pilih?
- Apakah ada keputusan yang kamu buat berdasarkan asumsi? Asumsi apa?
- Acuan: Referensi materi di C.6 (ISA Mapping) dan C.5 (Weak Entity) jika ada tantangan di area tersebut
Verifikasi Final:
- Sebelum submit, periksa logical model menggunakan Lampiran D (Checklist Validasi Logical Model)
- Pastikan semua item checklist pada bagian "Mapping Completeness", "Primary Key", "Foreign Key", dan "Naming Convention" terpenuhi
Format: PDF, minimal 4 halaman, font 11pt, margin 2.5cm
Nama file: Mapping_[NIM]_[Nama]_[Domain].pdf
Deadline: Dikumpulkan ke Ngaji UIN Gusdur sebelum jam kuliah pertemuan 6 dimulai
Bobot: Bagian dari Tugas Individu (komponen end-to-end modelling, 25% total nilai)
F. PERSIAPAN PERTEMUAN 6
F.1 Yang Akan Dipelajari
Pertemuan 6 membahas Normalisasi Data (1NFβ3NF) β teknik untuk memastikan skema relasional yang sudah kita buat bebas dari redundansi dan anomali. Ini adalah kelanjutan langsung dari pertemuan 5: setelah kita punya logical model, kita perlu memvalidasi dan memperbaikinya.
Topik utama pertemuan 6:
- Tiga jenis anomali data: insertion, update, deletion anomaly
- Functional dependency (FD): apa itu, bagaimana mengidentifikasi
- First Normal Form (1NF): tidak ada repeating group, atribut atomik
- Second Normal Form (2NF): tidak ada partial dependency (pada composite PK)
- Third Normal Form (3NF): tidak ada transitive dependency
F.2 Bacaan Wajib Sebelum Pertemuan 6
- Elmasri & Navathe, Chapter 14: Basics of Functional Dependencies and Normalization for Relational Databases
- Hoberman, Chapter 7: Normalization β Why and How
F.3 Pertanyaan Pemantik
Perhatikan tabel berikut yang belum dinormalisasi:
PESANAN_DETAIL(no_pesanan, tgl_pesanan, nama_pelanggan, alamat_pelanggan,
kode_produk, nama_produk, harga_satuan, qty, subtotal)Pikirkan pertanyaan berikut sebelum pertemuan 6:
- Jika seorang pelanggan pindah alamat, berapa banyak baris yang harus diupdate?
- Jika semua pesanan untuk produk tertentu dihapus, apakah data produk masih ada?
- Bisakah kita menambahkan data produk baru sebelum ada pesanan pertama untuk produk tersebut?
Kemampuan mengidentifikasi masalah-masalah di atas adalah kunci pemahaman normalisasi.
G. REFERENSI
G.1 Referensi Utama
-
Elmasri, R. & Navathe, S. B. (2015). Fundamentals of Database Systems (7th Edition). Pearson. ISBN: 978-0133970777
- Chapter 9: Relational Database Design by ER- and EER-to-Relational Mapping (bacaan utama pertemuan ini β algoritma mapping step-by-step)
- Section 9.1: ER-to-Relational Mapping Algorithm
- Section 9.2: Mapping EER Model to Relations
-
Hoberman, S. (2009). Data Modeling Made Simple (2nd Edition). Technics Publications. ISBN: 978-0977140060
- Chapter 5: Logical Data Model β Transformation Rules
- Chapter 6: Relationships in Logical Model
-
Connolly, T. & Begg, C. (2014). Database Systems: A Practical Approach to Design, Implementation, and Management (6th Edition). Pearson.
- Chapter 17: Methodology β Logical Database Design for the Relational Model
- Section 17.2: Build and Validate Local Logical Data Model
G.2 Referensi Pendukung
-
Simsion, G. & Witt, G. (2004). Data Modeling Essentials (3rd Edition). Morgan Kaufmann.
- Chapter 7: Translating to Physical Design
-
Date, C. J. (2012). Database Design and Relational Theory: Normal Forms and All That Jazz. O'Reilly Media.
- Chapter 2: Relations and Their Properties
G.3 Referensi Online
- Tutorialspoint. "DBMS β ER to Relational Mapping" β https://www.tutorialspoint.com/dbms/er_diagram_representation.htm (opens in a new tab)
- Vertabelo Academy. "How to Convert an ER Diagram to a Relational Database" β https://vertabelo.com/blog/how-to-convert-an-er-diagram-to-a-relational-database/ (opens in a new tab)
- Database Design Guide. "Mapping ERD to Tables" β https://www.lucidchart.com/pages/er-diagrams#section_4 (opens in a new tab)
G.4 Video Resources
- freeCodeCamp β "Database Design Course" β Bagian Mapping ERD ke Tabel (YouTube, menit 3:00 s.d. 4:30)
- Database Star β "How to Convert an ER Diagram to a Relational Database" (YouTube)
H. LAMPIRAN
Panduan Penggunaan Lampiran
Catatan Penting:
- Lampiran A adalah lembar kerja utama untuk praktikum di kelas (D.2); Bagian 4 (Keputusan Desain) juga digunakan sebagai template format pada tugas E.2
- Lampiran B adalah cheat sheet referensi yang dapat dipakai untuk praktikum maupun tugas
- Lampiran C adalah template dokumentasi utama untuk tugas E.2
- Lampiran D adalah checklist validasi yang dapat dipakai untuk praktikum maupun tugas
Lampiran A: Lembar Kerja PRAKTIKUM Pertemuan 5 β Gunakan untuk D.1 dan D.2; Bagian 4 juga untuk Tugas E.2
LEMBAR KERJA: TRANSFORMASI ERD β LOGICAL MODEL Nama: ___________________________ NIM: _______________ Domain/Sistem: _____________________ Tanggal: ____________
BAGIAN 1: Daftar Tabel yang Akan Dibuat
| No | Nama Tabel | Berasal dari | Aturan Mapping |
|---|---|---|---|
| 1 | Aturan __ | ||
| 2 | Aturan __ | ||
| 3 | Aturan __ | ||
| 4 | Aturan __ | ||
| 5 | Aturan __ | ||
| 6 | Aturan __ | ||
| 7 | Aturan __ | ||
| 8 | Aturan __ |
BAGIAN 2: Skema Relasional
Tulis skema setiap tabel di sini:
(Gunakan format: NAMA_TABEL(**PK_kolom**, *FK_kolom*, kolom_biasa))
1. _______________________________________________
PK: __________ FK: __________ NULL: __________
2. _______________________________________________
PK: __________ FK: __________ NULL: __________
3. _______________________________________________
PK: __________ FK: __________ NULL: __________
4. _______________________________________________
5. _______________________________________________
6. _______________________________________________
7. _______________________________________________
8. _______________________________________________BAGIAN 3: Daftar Foreign Key
| Tabel | Kolom FK | Tabel Referensi | Kolom Referensi | ON DELETE |
|---|---|---|---|---|
BAGIAN 4: Keputusan Desain
Keputusan 1: Dilema: ___________________________________________________ Pilihan: _________________________________________________ Alasan: __________________________________________________
Keputusan 2: Dilema: ___________________________________________________ Pilihan: _________________________________________________ Alasan: __________________________________________________
Keputusan 3: Dilema: ___________________________________________________ Pilihan: _________________________________________________ Alasan: __________________________________________________
Lampiran B: Cheat Sheet Algoritma Mapping β Referensi untuk PRAKTIKUM dan TUGAS
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHEAT SHEET: 9 ATURAN MAPPING ERD β TABEL β
β βββββββ¦ββββββββββββββββββ¦βββββββββββββββββββββββββββββββββββββββ£
β No. β Komponen ERD β Aksi β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 1 β Strong Entity β β Tabel baru β
β β β Attr β Kolom, PK konseptual β PK β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 2 β Derived Attr β β Tidak dibuat kolom (hitung query) β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 3 β Relationship 1:Nβ β FK di sisi "N" β
β β β Total participation β FK NOT NULL β
β β β Partial participation β FK NULL OK β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 4 β Relationship M:Nβ β Junction table baru β
β β β PK = FK1 + FK2 (+ rel. attr) β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 5 β Relationship 1:1β β FK di sisi total participation β
β β β Atau gabung jadi satu tabel β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 6 β Rel. Ternary β β Junction table dengan 3 FK β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 7 β Unary Rel. β β Self-referencing FK β
β β (1:N) β M:N unary β junction self-ref β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 8 β Weak Entity β β Tabel baru β
β β β PK = Partial Key + FK ke owner β
β β β ON DELETE CASCADE dari owner β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 9 β Multivalued Attrβ β Tabel baru β
β β β PK = FK ke entity + nilai atribut β
β βββββββ¬ββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ£
β 10 β ISA Hierarchy β β Pilih satu strategi: β
β β β A: Single table (+ discriminator) β
β β β B: Supertype + subtype tables β
β β β C: Subtype tables only β
ββββββββ©ββββββββββββββββββ©βββββββββββββββββββββββββββββββββββββββ
INGAT:
β’ Total participation β FK NOT NULL
β’ Partial participation β FK NULL OK
β’ Weak entity β ON DELETE CASCADE dari identifying entity
β’ Multivalued attr β ON DELETE CASCADE dari entity utama
β’ M:N tanpa rel. attr β PK junction = FK1 + FK2
β’ M:N dengan rel. attr β PK junction = FK1 + FK2 (+ bagian rel. attr jika perlu)Lampiran C: Template Data Dictionary untuk Logical Model β Gunakan untuk TUGAS (E.2)
Gunakan template berikut untuk mendokumentasikan setiap tabel dalam logical model dengan detail bisnis dan rationale desain:
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
NAMA TABEL : [NAMA_TABEL]
DESKRIPSI : [Apa yang direpresentasikan tabel ini]
BERASAL DARI: [Entity/Relationship di ERD yang menghasilkan tabel ini]
ATURAN : [Nomor aturan mapping yang digunakan]
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
KOLOM:
βββββββββββββββββ¬ββββββββ¬βββββββββββ¬ββββββββ¬βββββββββββββββββββββββ
β Nama Kolom β PK/FK β NULL? β Unik? β Deskripsi Bisnis β
βββββββββββββββββΌββββββββΌβββββββββββΌββββββββΌβββββββββββββββββββββββ€
β β PK β NOT NULL β Ya β β
β β FK β NOT NULL β β β
β β β NULL β β β
βββββββββββββββββ΄ββββββββ΄βββββββββββ΄ββββββββ΄βββββββββββββββββββββββ
FOREIGN KEYS:
β’ [kolom_fk] β [TABEL_REFERENSI]([kolom_pk])
ON DELETE: [CASCADE | RESTRICT | SET NULL]
Alasan: [mengapa opsi ini dipilih]
BUSINESS RULES yang direpresentasikan:
β’ [Business rule yang tercermin dalam constraint kolom ini]
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββLampiran D: Checklist Validasi Logical Model β Gunakan untuk PRAKTIKUM dan TUGAS
Gunakan checklist ini untuk memverifikasi kelengkapan logical model sebelum dikumpulkan (applicable untuk D.2, E.2, dan pengerjaan mandiri lainnya):
Mapping Completeness:
- Semua strong entity sudah menjadi tabel
- Semua weak entity sudah menjadi tabel dengan PK komposit
- Semua multivalued attribute sudah menjadi tabel tersendiri
- Semua relationship M:N sudah menghasilkan junction table
- Semua relationship 1:N sudah menghasilkan FK di sisi N
- Semua relationship 1:1 sudah ditangani (FK atau merge)
- Semua unary relationship sudah ditangani (self-referencing FK / junction)
- Semua ISA hierarchy sudah dipetakan dengan salah satu strategi
- Derived attribute tidak ada sebagai kolom (kecuali ada alasan)
Primary Key:
- Setiap tabel memiliki tepat satu primary key
- PK tidak NULL di setiap tabel
- PK komposit digunakan dengan benar (junction table, weak entity)
- Surrogate key digunakan dengan alasan yang valid
Foreign Key:
- Setiap FK merujuk ke PK yang valid di tabel lain
- Total participation β FK NOT NULL
- Partial participation β FK NULL OK
- ON DELETE action dipilih dengan tepat berdasarkan business rules
- Weak entity β FK ke identifying entity dengan CASCADE
Naming Convention:
- Nama tabel konsisten (UPPERCASE atau lowercase)
- Nama kolom konsisten (snake_case)
- FK dinamai sesuai konvensi (misal: [tabel_referensi]_id)
- Junction table dinamai dengan bermakna (bukan hanya gabungan nama)
PENUTUP
Pertemuan 5 adalah jembatan krusial antara dunia konseptual (ERD) dan dunia implementasi (database). Algoritma 9 aturan yang dipelajari hari ini adalah fondasi yang akan terus digunakan sepanjang karier sebagai data professional.
Key Messages Pertemuan 5:
- Transformasi dari ERD ke skema relasional bukan seni β ini adalah ilmu dengan aturan yang sistematis dan dapat dipelajari
- Penempatan FK yang tepat adalah kunci: sisi "many" untuk 1:N, junction table untuk M:N
- Weak entity dan multivalued attribute selalu menghasilkan tabel baru β tidak ada jalan pintas
- Pilihan strategi ISA harus didasarkan pada karakteristik domain, bukan preferensi pribadi
- Setiap keputusan desain harus terdokumentasi dan dapat dijustifikasi β inilah yang membedakan modeller yang baik
Koneksi ke Proyek Semester: Tugas pertemuan ini adalah Tahap 3 dari proyek bertahap β Logical Model. Output ini (skema relasional + daftar FK) akan menjadi input untuk pertemuan 6 (normalisasi) dan pertemuan 9 (implementasi fisik dalam SQL). Semakin teliti pekerjaan di tahap ini, semakin mudah tahap-tahap berikutnya.
Preview Pertemuan 6: Di pertemuan 6, kita akan mempelajari Normalisasi β proses sistematis untuk mengeliminasi redundansi dan anomali dari skema relasional. Ini adalah "quality check" untuk logical model yang sudah dibuat. Mahasiswa yang logical model-nya sudah bersih dari pertemuan ini akan lebih mudah mengerjakan normalisasi di pertemuan 6.
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