🧩 Pertemuan 1 β€” Entity Relationship Diagram (ERD)

🎯 Tujuan Pembelajaran

Setelah pertemuan ini, kamu diharapkan mampu:

  • Memahami konsep dasar ERD dan mengapa ERD penting dalam perancangan database.
  • Mengenal komponen-komponen ERD: Entity, Attribute, dan Relationship.
  • Memahami jenis-jenis relasi (Cardinality): One-to-One, One-to-Many, Many-to-Many.
  • Membaca dan menggambar ERD sederhana dari studi kasus nyata.
  • Mengkonversi ERD menjadi struktur tabel (DDL) di MySQL.

πŸ“˜ 1. Apa itu ERD?

ERD (Entity Relationship Diagram) adalah diagram yang menggambarkan hubungan antar entitas (objek) dalam sebuah sistem database sebelum database tersebut dibangun.

ERD berfungsi sebagai blueprint atau cetak biru database β€” sama seperti denah rumah sebelum bangunan didirikan.

πŸ’‘ Analogi: Kalau database adalah sebuah kota, ERD adalah peta kota tersebut yang menunjukkan gedung-gedung (entitas) dan jalan-jalan yang menghubungkannya (relasi).


πŸ“˜ 2. Komponen ERD

πŸ”Ή Entity (Entitas)

Entitas adalah objek nyata atau abstrak yang datanya ingin kita simpan. Digambarkan dengan persegi panjang.

Contoh: Mahasiswa, Mata Kuliah, Dosen, Produk, Pelanggan

πŸ”Ή Attribute (Atribut)

Atribut adalah karakteristik atau properti dari sebuah entitas. Digambarkan dengan elips/oval.

Contoh atribut Mahasiswa: NIM, Nama, Alamat, Tanggal Lahir

Jenis-jenis atribut:

Jenis Atribut Keterangan Contoh
Key Attribute Nilai unik, identifier NIM, ID_Produk
Simple Attribute Nilai tunggal, tidak bisa dibagi Nama, Harga
Composite Attribute Bisa dipecah jadi beberapa bagian Alamat β†’ Jalan, Kota, Kode Pos
Derived Attribute Nilainya diturunkan dari atribut lain Umur (dari Tanggal Lahir)
Multi-valued Attribute Bisa memiliki banyak nilai Nomor Telepon

πŸ”Ή Relationship (Relasi)

Relasi menggambarkan hubungan antar entitas. Digambarkan dengan belah ketupat.

Contoh: Mahasiswa mengambil Mata Kuliah, Pelanggan memesan Produk.


πŸ“˜ 3. Cardinality (Kardinalitas)

Kardinalitas menentukan berapa banyak instance suatu entitas yang berhubungan dengan instance entitas lain.

One-to-One (1:1)

Satu instance entitas A berhubungan dengan tepat satu instance entitas B.

1
Mahasiswa (1) ─────── memiliki ─────── (1) KartuMahasiswa

Contoh: Satu mahasiswa hanya memiliki satu kartu mahasiswa, dan satu kartu mahasiswa hanya dimiliki oleh satu mahasiswa.

One-to-Many (1:N)

Satu instance entitas A berhubungan dengan banyak instance entitas B.

1
Dosen (1) ─────── mengajar ─────── (N) Mata Kuliah

Contoh: Satu dosen bisa mengajar banyak mata kuliah, tapi satu mata kuliah hanya diajarkan oleh satu dosen.

Many-to-Many (M:N)

Banyak instance entitas A berhubungan dengan banyak instance entitas B.

1
Mahasiswa (M) ─────── mengambil ─────── (N) Mata Kuliah

Contoh: Satu mahasiswa bisa mengambil banyak mata kuliah, dan satu mata kuliah bisa diambil oleh banyak mahasiswa.

⚠️ Catatan: Relasi Many-to-Many di database harus dipecah menggunakan tabel perantara (junction table) ketika diimplementasikan.


πŸ“˜ 4. Notasi ERD

Ada beberapa notasi ERD yang umum digunakan:

Notasi Keterangan
Chen Notation Notasi klasik dengan elips, persegi, belah ketupat
Crow’s Foot Notation Notasi modern yang lebih mudah dibaca, digunakan di tools seperti MySQL Workbench
UML Notation Menggunakan class diagram

Pada course ini kita akan menggunakan Crow’s Foot Notation karena paling umum digunakan di industri.

Simbol Crow’s Foot

1
2
3
4
|─────   Tepat satu (mandatory one)
O───── Nol atau satu (optional one)
|──<── Satu ke banyak
O──<── Nol atau banyak

πŸ“˜ 5. Konversi ERD ke Tabel MySQL

Aturan Konversi:

  1. Setiap entitas β†’ satu tabel
  2. Atribut entitas β†’ kolom pada tabel tersebut
  3. Key attribute β†’ PRIMARY KEY
  4. Relasi 1:N β†’ tambahkan Foreign Key di sisi β€œbanyak”
  5. Relasi M:N β†’ buat tabel perantara (junction table) dengan dua Foreign Key
  6. Relasi 1:1 β†’ tambahkan Foreign Key di salah satu tabel

πŸ§‘β€πŸ’» LATIHAN 1 β€” Analisis ERD

Studi Kasus: Sistem Perpustakaan

Baca deskripsi berikut, kemudian identifikasi entitas, atribut, dan relasinya.

Perpustakaan BINUS memiliki anggota yang dapat meminjam buku. Setiap anggota memiliki ID anggota, nama, alamat, dan nomor telepon. Setiap buku memiliki ISBN, judul, nama pengarang, tahun terbit, dan jumlah stok. Anggota dapat meminjam banyak buku, dan satu buku dapat dipinjam oleh banyak anggota di waktu yang berbeda. Setiap peminjaman mencatat tanggal pinjam dan tanggal kembali.

Pertanyaan:

  1. Identifikasi minimal 3 entitas dari deskripsi di atas!
  2. Tuliskan minimal 3 atribut untuk masing-masing entitas!
  3. Identifikasi relasi antar entitas dan tentukan kardinalitasnya!
  4. Tentukan atribut mana yang menjadi Primary Key!

πŸ§‘β€πŸ’» LATIHAN 2 β€” Membaca ERD

Perhatikan ERD berikut untuk sistem e-commerce sederhana:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ PELANGGAN β”‚ β”‚ PESANAN β”‚ β”‚ PRODUK β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ *id_plg β”‚ 1 N β”‚ *id_pesanan β”‚ N M β”‚ *id_prd β”‚
β”‚ nama │───────────│ id_plg (FK) │──────────│ nama β”‚
β”‚ email β”‚ β”‚ tgl_pesan β”‚ β”‚ harga β”‚
β”‚ telepon β”‚ β”‚ status β”‚ β”‚ stok β”‚
β”‚ alamat β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
DETAIL_PESANAN β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ *id_detail β”‚β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
β”‚ id_pesanan(FK) β”‚
β”‚ id_prd (FK) β”‚
β”‚ jumlah β”‚
β”‚ harga_satuan β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Pertanyaan:

  1. Ada berapa entitas dalam ERD di atas?
  2. Jelaskan mengapa tabel DETAIL_PESANAN diperlukan!
  3. Apa jenis relasi antara PELANGGAN dan PESANAN?
  4. Apa jenis relasi antara PESANAN dan PRODUK?
  5. Kolom apa saja yang menjadi Foreign Key? Dan merujuk ke tabel mana?

πŸ§‘β€πŸ’» LATIHAN 3 β€” Konversi ERD ke SQL MySQL

Berdasarkan ERD di Latihan 2, implementasikan struktur tabelnya menggunakan MySQL:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-- Buat database terlebih dahulu
CREATE DATABASE db_ecommerce;
USE db_ecommerce;

-- TODO: Buat tabel PELANGGAN
-- Kolom: id_plg (PK, auto increment), nama, email (UNIQUE), telepon, alamat


-- TODO: Buat tabel PRODUK
-- Kolom: id_prd (PK, auto increment), nama, harga (DECIMAL 10,2), stok (DEFAULT 0)


-- TODO: Buat tabel PESANAN
-- Kolom: id_pesanan (PK), id_plg (FK), tgl_pesan (DEFAULT NOW()), status (DEFAULT 'Pending')


-- TODO: Buat tabel DETAIL_PESANAN
-- Kolom: id_detail (PK), id_pesanan (FK), id_prd (FK), jumlah, harga_satuan

Isi tabel-tabel tersebut dengan minimal 5 data tiap tabel, kemudian jalankan query SELECT * FROM untuk setiap tabel.


πŸ§‘β€πŸ’» LATIHAN 4 β€” Merancang ERD dari Nol

Pilih SALAH SATU studi kasus berikut, kemudian:

  1. Identifikasi semua entitas, atribut, dan relasinya
  2. Gambar ERD-nya (bisa di kertas, draw.io, atau MySQL Workbench)
  3. Konversikan ERD menjadi script SQL MySQL (CREATE TABLE lengkap dengan PK, FK, dan constraint)
  4. Isi dengan minimal 5 data per tabel
  5. Tampilkan semua data dengan SELECT

Pilihan Studi Kasus:

A. Sistem Akademik

Kampus memiliki mahasiswa yang terdaftar di jurusan tertentu. Mahasiswa mengambil mata kuliah yang diajarkan oleh dosen. Nilai mahasiswa dicatat per mata kuliah per semester.

B. Sistem Rumah Sakit

Rumah sakit memiliki dokter dari berbagai spesialisasi. Pasien bisa melakukan konsultasi dengan dokter. Setiap konsultasi mencatat keluhan, diagnosa, dan resep obat.

C. Sistem Toko Online

Toko memiliki kategori produk dan produk. Pelanggan bisa membuat pesanan berisi beberapa produk. Setiap produk memiliki ulasan dari pelanggan yang pernah membeli.


πŸ§‘β€πŸ’» LATIHAN 5 β€” Identifikasi Kesalahan ERD

Perhatikan desain tabel berikut yang BURUK. Identifikasi masalahnya dan perbaiki dengan ERD yang benar!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- Desain BURUK - jangan ditiru!
CREATE TABLE transaksi_buruk (
id INT AUTO_INCREMENT PRIMARY KEY,
nama_pelanggan VARCHAR(100),
alamat_pelanggan TEXT,
telepon_pelanggan VARCHAR(20),
nama_produk1 VARCHAR(100),
harga_produk1 DECIMAL(10,2),
jumlah_produk1 INT,
nama_produk2 VARCHAR(100),
harga_produk2 DECIMAL(10,2),
jumlah_produk2 INT,
nama_produk3 VARCHAR(100),
harga_produk3 DECIMAL(10,2),
jumlah_produk3 INT
);

Pertanyaan:

  1. Apa saja masalah pada desain tabel di atas? (minimal 4 masalah)
  2. Gambarkan ERD yang benar untuk kasus transaksi toko!
  3. Tulis ulang script SQL yang benar berdasarkan ERD yang kamu buat!

πŸ§‘β€πŸ’» LATIHAN 6 β€” Normalisasi Sederhana

Perhatikan tabel berikut (belum ternormalisasi):

id_transaksi nama_pelanggan email produk kategori qty harga
1 Andi [email protected] Laptop Elektronik 1 8000000
1 Andi [email protected] Mouse Aksesoris 2 150000
2 Budi [email protected] Keyboard Aksesoris 1 350000
3 Andi [email protected] Monitor Elektronik 1 3000000

Tugas:

  1. Identifikasi anomali pada tabel di atas (insert anomaly, update anomaly, delete anomaly)!
  2. Pecah tabel tersebut menjadi beberapa tabel yang ternormalisasi (minimal 1NF dan 2NF)!
  3. Gambar ERD dari hasil normalisasi!
  4. Implementasikan dalam SQL MySQL!

🧩 TUGAS PERORANGAN

Estimasi waktu: Β±2 jam

πŸ”Ή Instruksi:

Buatlah ERD untuk sistem manajemen Rental Kendaraan dengan ketentuan:

  1. Sistem harus memiliki minimal 4 entitas (contoh: Pelanggan, Kendaraan, Rental, Kategori_Kendaraan)
  2. Setiap entitas minimal memiliki 5 atribut
  3. Terdapat minimal 3 relasi dengan kardinalitas yang beragam
  4. Gambar ERD (gunakan draw.io, MySQL Workbench, atau tulis tangan)
  5. Konversikan ERD menjadi script SQL MySQL lengkap:
    • CREATE DATABASE
    • CREATE TABLE dengan PK, FK, constraint yang sesuai
    • INSERT INTO dengan minimal 10 data per tabel
    • SELECT untuk menampilkan isi setiap tabel

πŸ’Ύ Hasil yang dikumpulkan:

  • File gambar ERD (.png atau .pdf)
  • File SQL: Pertemuan1_Nama.sql

πŸ” Refleksi

Setelah pertemuan ini, jawab pertanyaan berikut:

  1. Mengapa ERD perlu dibuat sebelum membuat database?
  2. Apa bedanya relasi One-to-Many dan Many-to-Many? Berikan contoh masing-masing!
  3. Mengapa relasi Many-to-Many perlu dipecah menjadi tabel perantara?
  4. Apa yang dimaksud dengan Primary Key dan Foreign Key? Mengapa keduanya penting?

πŸ“š Referensi Tambahan