‹ Daftar slidePertemuan 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.
Langkah
Pertimbangan
Keputusan
1. Cek kolom "nama"
Bisa kembar — dua mahasiswa bernama sama mungkin terjadi
Ditolak sebagai PK
2. Cek kolom "email"
Unik, tapi mahasiswa bisa ganti email kampus/pribadi
Ditolak (tidak stabil)
3. Cek kolom "nim"
Unik per mahasiswa, diberi sistem akademik, tidak pernah berubah
Kandidat kuat
4. Putuskan tipe data
NIM 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.
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.
Langkah
Perintah
Hasil
1. Cek nim_mhs
INSERT ... VALUES (1, '24010120130001', 88)
NIM ada di tabel mahasiswa
2. Validasi FK
'24010120130001' dicocokkan ke kolom nim tabel mahasiswa
Cocok → DITERIMA
3. Cek nim_mhs
INSERT ... VALUES (2, '24010120139999', 75)
NIM TIDAK ada di tabel mahasiswa
4. Validasi FK
'24010120139999' dicocokkan ke kolom nim tabel mahasiswa
Tidak 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
Konsep
Fungsi
Sintaks Kunci
Primary Key
Identitas unik tiap baris dalam satu tabel
PRIMARY KEY (kolom)
Foreign Key
Menghubungkan & memvalidasi rujukan ke tabel lain
FOREIGN KEY (kolom) REFERENCES tabel(kolom)
Tabel Induk
Tabel yang dirujuk (memiliki PK)
Dibuat & diisi lebih dulu
Tabel Anak
Tabel yang merujuk (memiliki FK)
Dibuat & diisi belakangan
ON DELETE
Aturan saat induk dihapus
RESTRICT / 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.