πŸ“Š Data Modelling
πŸŽ“ Pertemuan
Pertemuan 5: Transformasi Conceptual ke Logical Model

MODUL PERTEMUAN 5

TRANSFORMASI CONCEPTUAL MODEL KE LOGICAL MODEL


A. INFORMASI UMUM MATA KULIAH

ItemKeterangan
Mata KuliahData Modelling
Kode MKSSD1019
Bobot3 SKS (Praktikum)
Semester4 (Empat)
Program StudiSains Data
FakultasEkonomi dan Bisnis Islam
UniversitasUIN K.H. Abdurrahman Wahid Pekalongan
Dosen PengampuMohammad 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:

  1. Menjelaskan perbedaan antara conceptual model, logical model, dan physical model beserta peran masing-masing (C2 – Memahami)
  2. Menerapkan algoritma mapping strong entity menjadi tabel relasional (C3 – Mengaplikasikan)
  3. Menentukan foreign key yang tepat untuk merepresentasikan relationship 1:1 dan 1:N (C3 – Mengaplikasikan)
  4. Membuat junction table yang benar untuk merepresentasikan relationship M:N beserta relationship attribute-nya (C3 – Mengaplikasikan)
  5. Memetakan weak entity, multivalued attribute, dan hierarki ISA ke dalam tabel relasional (C3 – Mengaplikasikan)
  6. Menganalisis trade-off dari tiga strategi mapping hierarki ISA dan memilih yang paling tepat (C4 – Menganalisis)

B.3 Kompetensi yang Dikembangkan

DomainKompetensi
KognitifMemahami konsep (C2), Menerapkan algoritma (C3), Menganalisis trade-off (C4)
AfektifMenghargai proses transformasi yang sistematis; mengembangkan ketelitian dalam menentukan FK
PsikomotorikMenuliskan skema relasional dalam notasi formal; mendokumentasikan tabel dengan data dictionary

B.4 Indikator Pencapaian

Setelah mengikuti pertemuan ini, mahasiswa diharapkan mampu:

  1. Menghasilkan skema tabel relasional yang benar dari sebuah ERD sederhana secara mandiri
  2. Menentukan di mana FK ditempatkan untuk setiap jenis relationship (1:1, 1:N, M:N)
  3. Membuat junction table lengkap (dengan PK komposit dan FK) untuk relationship M:N
  4. Memetakan weak entity ke tabel dengan PK komposit yang tepat
  5. Memilih dan menjustifikasi strategi mapping ISA yang paling sesuai untuk konteks bisnis tertentu

B.5 Alokasi Waktu

NoKegiatanDurasiKeterangan
1Pembukaan & Review Tugas ERD Pertemuan 410 menitHighlight pola umum ERD dari tugas mahasiswa
2Aktivitas Pemantik: "ERD ke Tabel β€” Semudah itu?"10 menitEksplorasi intuisi mahasiswa
3Materi 1: Dari Konseptual ke Logikal β€” Apa yang Berubah?15 menitCeramah + perbandingan dua level model
4Materi 2: Algoritma Mapping β€” Strong Entity & Attribute20 menitCeramah + latihan singkat
5Break10 menit–
6Materi 3: Mapping Relationship (1:1, 1:N, M:N, Ternary)25 menitCeramah + demonstrasi step-by-step
7Materi 4: Mapping Weak Entity & Multivalued Attribute15 menitCeramah + contoh
8Materi 5: Mapping Hierarki ISA β€” Tiga Strategi15 menitCeramah + perbandingan trade-off
9Praktikum Terbimbing: Transform ERD Lengkap20 menitLatihan individual/berpasangan
10Review & Diskusi Hasil Praktikum10 menitPembahasan bersama, tanya jawab
11Evaluasi, Briefing Tugas & Penutup10 menitKuis, penjelasan tugas, refleksi
Total160 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:

ERD Aktivitas Pemantik β€” Pertemuan 5

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:

  1. Jika kita taruh Kode_MK di tabel MAHASISWA, masalah apa yang timbul jika Budi mengambil 6 MK?
  2. Ke mana kita menyimpan Nilai dan Semester yang ada di relationship?
  3. 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 MySQL

C.2.2 Apa yang Berubah dari Conceptual ke Logical?

AspekConceptual ModelLogical Model
EntityKotak/rectangle dalam ERDTabel (relation)
AttributeOval/ellipse atau baris dalam entityKolom (column/field)
Primary KeyIdentifier konseptual (digaris bawah)Kolom PK yang eksplisit
RelationshipDiamond/garis dengan kardinalitasForeign Key atau Junction Table
M:N RelationshipSatu garis dengan kardinalitas M:NJunction Table (tabel perantara)
Weak EntityDouble rectangleTabel dengan PK komposit (PK sendiri + FK)
Multivalued Attr.Double ovalTabel tersendiri
Derived AttributeDashed ovalTidak disimpan (dihitung saat query) atau kolom tersimpan
ISA HierarchyDiagram hierarkiPilihan dari 3 strategi tabel
Notasi OutputDiagram visualNotasi 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_KULIAH

C.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:

OpsiPerilaku saat data referensi dihapus/diubahKapan Digunakan
RESTRICTTolak operasi delete/updateDefault; data anak harus dihapus dulu
CASCADEHapus/update otomatis semua data anakWeak entity; data anak tidak bermakna tanpa induk
SET NULLSet FK menjadi NULLRelationship opsional; anak bisa berdiri sendiri
SET DEFAULTSet FK ke nilai defaultJarang digunakan

C.3 Materi 2: Algoritma Mapping β€” Strong Entity dan Attribute

C.3.1 Aturan Mapping 1: Strong Entity β†’ Tabel

Langkah:

  1. Buat satu tabel untuk setiap strong entity
  2. Kolom = semua simple attribute dari entity
  3. Pilih satu candidate key sebagai primary key
  4. 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 mandiri

C.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)
      ^^^
      PK

C.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 KATEGORI

Kapan 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 PK

C.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 PK

C.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 sama

C.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_Fungsional

C.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 validasinya

C.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 terpisah

C.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 subtype

C.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, nilai

C.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 JADWAL

C.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 relationship

D. 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:

NoKomponen ERDAturan yang DigunakanHasil (Skema Relasional)
1Entity PELANGGAN (id, nama, email)??
2Atribut usia (derived dari tgl_lahir) di PELANGGAN??
3PESANAN (N) ── milik ── PELANGGAN (1)??
4PENULIS (M) ── menulis ── BUKU (N), rel. attr: tahun_kontrak??
5KARYAWAN (partial) ── memimpin ── PROYEK (total), 1:1??
6RUANGAN (weak entity dari GEDUNG), partial key: nomor_ruang??
7MAHASISWA memiliki {nomor_hp} (multivalued)??
8KARYAWAN ── 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)

  1. 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?

  2. 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!

  3. Sebuah weak entity BARIS_INVOICE bergantung pada INVOICE. Partial key-nya adalah nomor_baris. Tuliskan skema relasional lengkap untuk BARIS_INVOICE!

  4. Dari hierarki ISA: KENDARAAN β†’ {MOBIL, MOTOR} dengan constraint {disjoint, total}, strategi mana (A, B, atau C) yang paling tepat? Jelaskan alasannya!

  5. 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

TabelKolom FKMerujuk ke TabelMerujuk ke KolomON DELETEAlasan
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

  1. 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
  2. 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
  3. 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

  1. Simsion, G. & Witt, G. (2004). Data Modeling Essentials (3rd Edition). Morgan Kaufmann.

    • Chapter 7: Translating to Physical Design
  2. 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

  1. Tutorialspoint. "DBMS β€” ER to Relational Mapping" β€” https://www.tutorialspoint.com/dbms/er_diagram_representation.htm (opens in a new tab)
  2. 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)
  3. 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

  1. freeCodeCamp β€” "Database Design Course" β€” Bagian Mapping ERD ke Tabel (YouTube, menit 3:00 s.d. 4:30)
  2. 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

NoNama TabelBerasal dariAturan Mapping
1Aturan __
2Aturan __
3Aturan __
4Aturan __
5Aturan __
6Aturan __
7Aturan __
8Aturan __

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

TabelKolom FKTabel ReferensiKolom ReferensiON 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:

  1. Transformasi dari ERD ke skema relasional bukan seni β€” ini adalah ilmu dengan aturan yang sistematis dan dapat dipelajari
  2. Penempatan FK yang tepat adalah kunci: sisi "many" untuk 1:N, junction table untuk M:N
  3. Weak entity dan multivalued attribute selalu menghasilkan tabel baru β€” tidak ada jalan pintas
  4. Pilihan strategi ISA harus didasarkan pada karakteristik domain, bukan preferensi pribadi
  5. 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