Post 7: Primary Key, Foreign Key, dan Candidate Key
š Konsep Key dalam Database
Key adalah elemen fundamental dalam database relasional yang digunakan untuk mengidentifikasi record secara unik dan membangun relasi antar tabel. Memahami jenis-jenis key sangat penting untuk merancang database yang efisien dan terstruktur dengan baik.
1. Primary Key (Kunci Utama)
Definisi Primary Key
Primary Key adalah attribute atau kombinasi attribute yang secara unik mengidentifikasi setiap record dalam sebuah tabel. Primary Key tidak boleh memiliki nilai NULL dan harus unique untuk setiap row.
Karakteristik Primary Key:
- Uniqueness: Setiap nilai harus unik, tidak boleh ada duplikasi
- Not Null: Primary Key tidak boleh bernilai NULL
- Immutable: Nilai Primary Key sebaiknya tidak berubah
- Single per Table: Satu tabel hanya boleh memiliki satu Primary Key
- Indexing: Database otomatis membuat index pada Primary Key
5 Contoh Penerapan dalam ERD
Contoh 1: Sistem Perpustakaan
ERD Sistem Perpustakaan
ANGGOTA āā1:Nāā PEMINJAMAN āāN:1āā BUKU
Tabel ANGGOTA
| ID_Anggota (PK) | Nama | No_Telepon | |
|---|---|---|---|
| A001 | Gilang Ramadhan | gilang@email.com | 081234567890 |
Tabel BUKU
| ISBN (PK) | Judul | Pengarang | Tahun |
|---|---|---|---|
| 978-0134685991 | Database Systems | Elmasri | 2015 |
Tabel PEMINJAMAN
| ID_Pinjam (PK) | ID_Anggota (FK) | ISBN (FK) | Tgl_Pinjam | Tgl_Kembali |
|---|---|---|---|---|
| P001 | A001 | 978-0134685991 | 2024-10-01 | 2024-10-08 |
CREATE TABLE anggota (
id_anggota VARCHAR(10) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
no_telepon VARCHAR(15)
);
CREATE TABLE buku (
isbn VARCHAR(20) PRIMARY KEY,
judul VARCHAR(200) NOT NULL,
pengarang VARCHAR(100),
tahun INT
);
CREATE TABLE peminjaman (
id_pinjam VARCHAR(10) PRIMARY KEY,
id_anggota VARCHAR(10),
isbn VARCHAR(20),
tgl_pinjam DATE,
tgl_kembali DATE,
FOREIGN KEY (id_anggota) REFERENCES anggota(id_anggota),
FOREIGN KEY (isbn) REFERENCES buku(isbn)
);
Penjelasan:
- Primary Keys: ID_Anggota, ISBN, ID_Pinjam
- Foreign Keys: ID_Anggota dan ISBN di tabel PEMINJAMAN
- Candidate Keys: Email di tabel ANGGOTA (unique)
Contoh 2: Sistem Akademik Kampus
ERD Sistem Akademik
MAHASISWA āā1:Nāā KRS āāN:1āā MATA_KULIAH
DOSEN āā1:Nāā MATA_KULIAH
Tabel MAHASISWA
| NIM (PK) | Nama | Jurusan | Angkatan |
|---|---|---|---|
| 24416255201003 | Gilang Ramadhan | Teknik Informatika | 2024 |
Tabel DOSEN
| NIP (PK) | Nama | Departemen |
|---|---|---|
| 198501012020121001 | Dr. Ahmad Fauzi | Informatika |
Tabel MATA_KULIAH
| Kode_MK (PK) | Nama_MK | SKS | NIP_Dosen (FK) |
|---|---|---|---|
| TI101 | Basis Data | 3 | 198501012020121001 |
Tabel KRS
| ID_KRS (PK) | NIM (FK) | Kode_MK (FK) | Semester | Nilai |
|---|---|---|---|---|
| 1 | 24416255201003 | TI101 | Ganjil 2024 | A |
CREATE TABLE mahasiswa (
nim VARCHAR(15) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
jurusan VARCHAR(50),
angkatan INT
);
CREATE TABLE dosen (
nip VARCHAR(20) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
departemen VARCHAR(50)
);
CREATE TABLE mata_kuliah (
kode_mk VARCHAR(10) PRIMARY KEY,
nama_mk VARCHAR(100) NOT NULL,
sks INT,
nip_dosen VARCHAR(20),
FOREIGN KEY (nip_dosen) REFERENCES dosen(nip)
);
CREATE TABLE krs (
id_krs INT PRIMARY KEY AUTO_INCREMENT,
nim VARCHAR(15),
kode_mk VARCHAR(10),
semester VARCHAR(20),
nilai CHAR(2),
FOREIGN KEY (nim) REFERENCES mahasiswa(nim),
FOREIGN KEY (kode_mk) REFERENCES mata_kuliah(kode_mk)
);
Contoh 3: Sistem E-Commerce
ERD Sistem E-Commerce
PELANGGAN āā1:Nāā PESANAN āā1:Nāā DETAIL_PESANAN
PRODUK āā1:Nāā DETAIL_PESANAN
Tabel PELANGGAN
| ID_Pelanggan (PK) | Nama | Email (CK) | No_HP |
|---|---|---|---|
| C001 | Gilang Ramadhan | gilang@email.com | 081234567890 |
Tabel PRODUK
| ID_Produk (PK) | Nama_Produk | Harga | Stok |
|---|---|---|---|
| PRD001 | Laptop ASUS | 8500000 | 10 |
Tabel PESANAN
| ID_Pesanan (PK) | ID_Pelanggan (FK) | Tanggal | Total | Status |
|---|---|---|---|---|
| ORD001 | C001 | 2024-10-09 | 8500000 | Diproses |
Tabel DETAIL_PESANAN
| ID_Detail (PK) | ID_Pesanan (FK) | ID_Produk (FK) | Jumlah | Subtotal |
|---|---|---|---|---|
| 1 | ORD001 | PRD001 | 1 | 8500000 |
CREATE TABLE pelanggan (
id_pelanggan VARCHAR(10) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
email VARCHAR(100) UNIQUE,
no_hp VARCHAR(15)
);
CREATE TABLE produk (
id_produk VARCHAR(10) PRIMARY KEY,
nama_produk VARCHAR(200) NOT NULL,
harga DECIMAL(12,2),
stok INT
);
CREATE TABLE pesanan (
id_pesanan VARCHAR(10) PRIMARY KEY,
id_pelanggan VARCHAR(10),
tanggal DATE,
total DECIMAL(12,2),
status VARCHAR(20),
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan)
);
CREATE TABLE detail_pesanan (
id_detail INT PRIMARY KEY AUTO_INCREMENT,
id_pesanan VARCHAR(10),
id_produk VARCHAR(10),
jumlah INT,
subtotal DECIMAL(12,2),
FOREIGN KEY (id_pesanan) REFERENCES pesanan(id_pesanan),
FOREIGN KEY (id_produk) REFERENCES produk(id_produk)
);
Contoh 4: Sistem Rumah Sakit
ERD Sistem Rumah Sakit
PASIEN āā1:Nāā REKAM_MEDIS āāN:1āā DOKTER
Tabel PASIEN
| ID_Pasien (PK) | NIK (CK) | Nama | Tgl_Lahir |
|---|---|---|---|
| P001 | 3201234567890123 | Gilang Ramadhan | 2000-01-15 |
Tabel DOKTER
| ID_Dokter (PK) | Nama | Spesialisasi | No_Izin (CK) |
|---|---|---|---|
| D001 | Dr. Ahmad | Umum | SIP123456 |
Tabel REKAM_MEDIS
| ID_Rekam (PK) | ID_Pasien (FK) | ID_Dokter (FK) | Tanggal | Diagnosa |
|---|---|---|---|---|
| RM001 | P001 | D001 | 2024-10-09 | Demam |
CREATE TABLE pasien (
id_pasien VARCHAR(10) PRIMARY KEY,
nik VARCHAR(16) UNIQUE NOT NULL,
nama VARCHAR(100) NOT NULL,
tgl_lahir DATE
);
CREATE TABLE dokter (
id_dokter VARCHAR(10) PRIMARY KEY,
nama VARCHAR(100) NOT NULL,
spesialisasi VARCHAR(50),
no_izin VARCHAR(20) UNIQUE
);
CREATE TABLE rekam_medis (
id_rekam VARCHAR(10) PRIMARY KEY,
id_pasien VARCHAR(10),
id_dokter VARCHAR(10),
tanggal DATE,
diagnosa TEXT,
FOREIGN KEY (id_pasien) REFERENCES pasien(id_pasien),
FOREIGN KEY (id_dokter) REFERENCES dokter(id_dokter)
);
Contoh 5: Sistem Rental Mobil
ERD Sistem Rental Mobil
PELANGGAN āā1:Nāā TRANSAKSI āāN:1āā MOBIL
Tabel PELANGGAN
| ID_Pelanggan (PK) | No_KTP (CK) | Nama | No_SIM (CK) |
|---|---|---|---|
| PL001 | 3201234567890123 | Gilang Ramadhan | 1234567890123456 |
Tabel MOBIL
| ID_Mobil (PK) | No_Plat (CK) | Merk | Harga_Sewa |
|---|---|---|---|
| M001 | B1234XYZ | Toyota Avanza | 350000 |
Tabel TRANSAKSI
| ID_Transaksi (PK) | ID_Pelanggan (FK) | ID_Mobil (FK) | Tgl_Sewa | Tgl_Kembali | Total |
|---|---|---|---|---|---|
| TR001 | PL001 | M001 | 2024-10-09 | 2024-10-12 | 1050000 |
CREATE TABLE pelanggan (
id_pelanggan VARCHAR(10) PRIMARY KEY,
no_ktp VARCHAR(16) UNIQUE NOT NULL,
nama VARCHAR(100) NOT NULL,
no_sim VARCHAR(16) UNIQUE NOT NULL
);
CREATE TABLE mobil (
id_mobil VARCHAR(10) PRIMARY KEY,
no_plat VARCHAR(15) UNIQUE NOT NULL,
merk VARCHAR(50),
harga_sewa DECIMAL(10,2)
);
CREATE TABLE transaksi (
id_transaksi VARCHAR(10) PRIMARY KEY,
id_pelanggan VARCHAR(10),
id_mobil VARCHAR(10),
tgl_sewa DATE,
tgl_kembali DATE,
total DECIMAL(12,2),
FOREIGN KEY (id_pelanggan) REFERENCES pelanggan(id_pelanggan),
FOREIGN KEY (id_mobil) REFERENCES mobil(id_mobil)
);
Perbedaan Primary Key, Foreign Key, dan Candidate Key
| Aspek | Primary Key | Foreign Key | Candidate Key |
|---|---|---|---|
| Jumlah per Tabel | Hanya 1 | Bisa banyak | Bisa banyak |
| Nilai NULL | Tidak boleh | Boleh (optional) | Tidak boleh |
| Uniqueness | Harus unique | Tidak harus | Harus unique |
| Fungsi Utama | Identifikasi record | Membuat relasi | Kandidat PK |
šÆ Kesimpulan dari 5 Contoh
- Primary Key: Selalu ada di setiap tabel untuk identifikasi unik
- Foreign Key: Digunakan untuk membangun relasi antar tabel
- Candidate Key: Attribute yang unique dan bisa menjadi alternatif PK (seperti Email, NIK, No_Plat)
- Composite Key: Kadang diperlukan saat tidak ada single attribute yang unique (seperti di KRS)
Best Practices
ā Tips Penting:
- Pilih Primary Key yang stabil dan tidak berubah
- Gunakan Foreign Key untuk menjaga integritas referensial
- Identifikasi Candidate Key untuk membuat UNIQUE constraint
- Buat index pada Foreign Key untuk meningkatkan performa JOIN
- Dokumentasikan relasi dengan jelas dalam ERD
Kesimpulan
Primary Key, Foreign Key, dan Candidate Key adalah komponen esensial dalam desain database. Melalui 5 contoh di atas, kita dapat melihat bagaimana ketiga konsep ini diterapkan dalam berbagai sistem: perpustakaan, akademik, e-commerce, rumah sakit, dan rental mobil. Pemahaman yang baik tentang konsep-konsep ini akan membantu Anda merancang database yang efisien, terstruktur, dan mudah dimaintain.
ā Kembali ke Beranda