stdsquare²
🎓 Kelas
stdsquare / materi / slides / pertemuan-09
Tema
Japan
Arcade
Dark Retro
Font
‹ Daftar slide Pertemuan 9: Primary key dan foreign key dengan DDL
Sistem Database · Prodi Bisnis Digital

Sistem Database

Pertemuan 9: Primary Key dan Foreign Key dengan DDL

Menegakkan aturan integritas data langsung di dalam struktur tabel, bukan hanya di aplikasi.

RPS minggu 10 · 2x50 menit

Tujuan Pembelajaran Hari Ini

Sub-CPMK 1
PK
Primary Key
Menjelaskan fungsi primary key sebagai identitas unik tiap baris dan menuliskannya dalam perintah CREATE TABLE.
Sub-CPMK 2
FK
Foreign Key
Menjelaskan fungsi foreign key sebagai penghubung antar-tabel dan aturan referential integrity yang menyertainya.
Konteks alur matkul: minggu lalu (P8) Anda belajar constraint integritas data secara konsep; hari ini kita implementasikan lewat DDL nyata sebagai jembatan menuju SQL DML minggu depan (INSERT/UPDATE/DELETE).

Mengapa Ini Penting?

Tanpa PK/FK, database hanyalah kumpulan tabel Excel yang kebetulan disimpan di server.

Kasus nyata: sebuah toko online mencatat pesanan dengan kolom nama pelanggan diketik manual di setiap baris pesanan. Hasilnya: "Budi", "budi", dan "Budi Santoso" dianggap tiga pelanggan berbeda oleh sistem laporan penjualan — data rusak, laporan salah, keputusan bisnis meleset.
Tanpa Kunci
Data ganda, baris yatim (tidak jelas induknya), laporan keliru, sulit dilacak.
Dengan PK/FK
Setiap baris punya identitas pasti, setiap relasi tervalidasi otomatis oleh database.
Bagian 1 dari 3
Primary Key
Identitas unik setiap baris dalam tabel — fondasi sebelum kita bicara relasi antar-tabel.

Apa Itu Primary Key?

Primary key (PK) adalah satu kolom (atau gabungan kolom) yang secara unik mengidentifikasi setiap baris dalam sebuah tabel — tidak boleh kosong (NOT NULL) dan tidak boleh kembar (UNIQUE).

Analogi Sehari-hari
  • NIK (Nomor Induk Kependudukan) — identitas unik tiap warga negara.
  • NIM (Nomor Induk Mahasiswa) — identitas unik tiap mahasiswa di UNDIP.
  • Nomor resi paket JNE/J&T — identitas unik tiap pengiriman.
PK = UNIQUE + NOT NULL

Kriteria Memilih Primary Key yang Baik

Wajib Dipenuhi
  • Nilai selalu unik untuk tiap baris
  • Tidak pernah bernilai kosong (NULL)
  • Nilai stabil, jarang atau tidak pernah berubah
Sebaiknya Dihindari
  • Kolom yang nilainya bisa berubah (nomor HP, email)
  • Kolom deskriptif seperti nama orang
  • Kolom yang bergantung pada input manusia tanpa validasi
Solusi paling aman: buat kolom id buatan sistem (surrogate key) bertipe angka AUTO_INCREMENT — database yang menomori otomatis, bukan manusia.

Menulis Primary Key dalam DDL

DDL (Data Definition Language) — perintah SQL untuk mendefinisikan struktur database, seperti CREATE, ALTER, DROP.

CREATE TABLE pelanggan ( id_pelanggan INT AUTO_INCREMENT, nama VARCHAR(50) NOT NULL, email VARCHAR(50), PRIMARY KEY (id_pelanggan) );
Cara alternatif (inline, langsung di baris kolom): id_pelanggan INT AUTO_INCREMENT PRIMARY KEY — sama-sama sah, gaya di atas lebih jelas dibaca untuk tabel dengan banyak kolom. Kalau tabel sudah terlanjur dibuat tanpa PK, dipakai ALTER TABLE ... ADD PRIMARY KEY (kolom); untuk menambahkannya belakangan.

Hitung dari Nol: Merancang PK Tabel Mahasiswa

Kasus: tabel mahasiswa untuk sistem akademik prodi Bisnis Digital FEB UNDIP.

LangkahPertimbanganKeputusan
1. Cek kolom "nama"Bisa kembar — dua mahasiswa bernama sama mungkin terjadiDitolak sebagai PK
2. Cek kolom "email"Unik, tapi mahasiswa bisa ganti email kampus/pribadiDitolak (tidak stabil)
3. Cek kolom "nim"Unik per mahasiswa, diberi sistem akademik, tidak pernah berubahKandidat kuat
4. Putuskan tipe dataNIM UNDIP berformat "24010120130001" (14 digit, ada angka 0 di depan)VARCHAR(14), bukan INT
CREATE TABLE mahasiswa ( nim VARCHAR(14), nama VARCHAR(50) NOT NULL, PRIMARY KEY (nim) );
Bagian 2 dari 3
Foreign Key
Menghubungkan tabel satu dengan tabel lain sekaligus menjaga agar hubungan itu selalu valid.

Apa Itu Foreign Key?

Foreign key (FK) adalah kolom di satu tabel yang nilainya merujuk ke primary key tabel lain — cara database "menghubungkan" data antar-tabel.

mahasiswaPK nimnamanilai_utsPK id_nilaiFK nim_mhsskordirujuk oleh

Menulis Foreign Key dalam DDL

CREATE TABLE nilai_uts ( id_nilai INT AUTO_INCREMENT, nim_mhs VARCHAR(14), skor DECIMAL(5,2), PRIMARY KEY (id_nilai), FOREIGN KEY (nim_mhs) REFERENCES mahasiswa(nim) );
Baris FOREIGN KEY (nim_mhs) REFERENCES mahasiswa(nim) artinya: "kolom nim_mhs di tabel ini WAJIB cocok dengan salah satu nilai kolom nim di tabel mahasiswa."

Hitung dari Nol: Menguji Foreign Key

Tabel mahasiswa berisi NIM: 24010120130001, 24010120130002. Kita coba dua perintah INSERT ke tabel nilai_uts.

LangkahPerintahHasil
1. Cek nim_mhsINSERT ... VALUES (1, '24010120130001', 88)NIM ada di tabel mahasiswa
2. Validasi FK'24010120130001' dicocokkan ke kolom nim tabel mahasiswaCocok → DITERIMA
3. Cek nim_mhsINSERT ... VALUES (2, '24010120139999', 75)NIM TIDAK ada di tabel mahasiswa
4. Validasi FK'24010120139999' dicocokkan ke kolom nim tabel mahasiswaTidak cocok → DITOLAK
Error yang Muncul
Cannot add or update a child row: a foreign key constraint fails

Coba Sendiri: Uji INSERT dengan NIM Valid dan Tak Terdaftar

Ketik NIM yang mau di-INSERT ke tabel nilai_uts, lalu lihat langsung apakah database menerima atau menolaknya.

ON DELETE dan ON UPDATE: Aturan Lanjutan

Apa yang terjadi kalau baris induk (mahasiswa) dihapus, sementara baris anak (nilai_uts) masih merujuk padanya?

RESTRICT (default)

Penghapusan ditolak selama masih ada anak yang merujuk.

CASCADE

Baris anak ikut terhapus otomatis bersama induknya.

SET NULL

Kolom FK di baris anak diubah jadi kosong, baris anak tetap ada.

FOREIGN KEY (nim_mhs) REFERENCES mahasiswa(nim) ON DELETE CASCADE ON UPDATE CASCADE
Bagian 3 dari 3
Praktik & Konsolidasi
Merangkai PK dan FK dalam satu skema utuh, lalu menguji pemahaman Anda.

Studi Kasus: Skema Pemesanan Toko Online

Tiga tabel: pelanggan, pesanan, dan produk — relasi khas sistem e-commerce UMKM.

CREATE TABLE pelanggan ( id_pelanggan INT AUTO_INCREMENT PRIMARY KEY, nama VARCHAR(50) NOT NULL ); CREATE TABLE produk ( id_produk INT AUTO_INCREMENT PRIMARY KEY, nama_produk VARCHAR(50) NOT NULL, harga DECIMAL(10,2) ); CREATE TABLE pesanan ( id_pesanan INT AUTO_INCREMENT PRIMARY KEY, id_pelanggan INT, id_produk INT, jumlah INT, FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan), FOREIGN KEY (id_produk) REFERENCES produk(id_produk) );

DROP dan Urutan Penghapusan Tabel

Karena foreign key membuat tabel saling bergantung, urutan DROP TABLE menjadi penting.

Salah
DROP TABLE pelanggan; — ditolak, sebab tabel pesanan masih merujuk padanya.
Benar
Hapus tabel anak (pesanan) lebih dulu, baru tabel induk (pelanggan, produk).
Prinsip umum: DROP dari anak ke induk, kebalikan dari urutan CREATE (induk dulu, baru anak).

Latihan Kelas: Identifikasi PK dan FK

Kasus: sistem presensi mata kuliah. Ada tabel dosen, matakuliah, dan presensi (mencatat dosen mana mengajar matkul mana pada tanggal tertentu).

Diskusikan dengan teman sebangku (5 menit): kolom apa yang menjadi PK di tiap tabel? Kolom apa yang menjadi FK di tabel presensi? Tuliskan draf DDL-nya di kertas sebelum kita bahas bersama.
dosen

id_dosen, nama, nip

matakuliah

id_matkul, nama_matkul

presensi

id_presensi, id_dosen, id_matkul, tanggal

Kesalahan Umum yang Perlu Dihindari

Lupa NOT NULL pada kolom PK — sebagian sistem database toleran, tapi ini praktik buruk yang membingungkan rekan kerja Anda.
Tipe data FK tidak sama dengan tipe data PK yang dirujuk (mis. INT vs VARCHAR) — DDL akan ditolak.
Mencoba INSERT ke tabel anak sebelum data induknya ada — urutan pengisian data juga harus induk dulu.
Menghapus tabel induk sebelum tabel anak — akan ditolak oleh constraint FK (RESTRICT).

Rangkuman: Cheat Sheet PK & FK

KonsepFungsiSintaks Kunci
Primary KeyIdentitas unik tiap baris dalam satu tabelPRIMARY KEY (kolom)
Foreign KeyMenghubungkan & memvalidasi rujukan ke tabel lainFOREIGN KEY (kolom) REFERENCES tabel(kolom)
Tabel IndukTabel yang dirujuk (memiliki PK)Dibuat & diisi lebih dulu
Tabel AnakTabel yang merujuk (memiliki FK)Dibuat & diisi belakangan
ON DELETEAturan saat induk dihapusRESTRICT / CASCADE / SET NULL

Tugas & Pratinjau Minggu Depan

Tugas Minggu Ini
  • Rancang skema 3 tabel untuk kasus perpustakaan kampus (buku, anggota, peminjaman)
  • Tuliskan DDL lengkap dengan PK dan FK
  • Kumpulkan sebagai file .sql via portal kuliah, paling lambat sebelum pertemuan berikutnya
Pertemuan 10 · RPS Minggu 11
DML
INSERT, UPDATE, DELETE
Kita akan mengisi tabel-tabel yang skemanya sudah Anda rancang hari ini dengan data sungguhan.