Konsep Basis Data · Pelajaran 2 dari 9
Primary key, foreign key, dan relasi
9 menit baca · BelajarCode
Primary key
Primary key adalah kolom (atau gabungan kolom) yang nilainya unik untuk setiap baris dan tidak boleh kosong. Primary key dipakai untuk menunjuk satu baris dengan pasti.
Foreign key
Foreign key adalah kolom yang merujuk primary key di tabel lain. Dengan foreign key, data tidak perlu disalin: tabel mahasiswa cukup menyimpan jurusan_id, bukan nama jurusan lengkap di setiap baris.
1CREATE TABLE jurusan (2 id INTEGER PRIMARY KEY,3 nama TEXT NOT NULL UNIQUE4);56CREATE TABLE mahasiswa (7 nim TEXT PRIMARY KEY,8 nama TEXT NOT NULL,9 angkatan INTEGER CHECK (angkatan >= 2000),10 jurusan_id INTEGER REFERENCES jurusan(id)11);1213INSERT INTO jurusan (nama) VALUES ('Informatika'), ('Sistem Informasi');14INSERT INTO mahasiswa VALUES15 ('2410511001', 'Rizky', 2024, 1),16 ('2410511002', 'Sinta', 2024, 1),17 ('2410512001', 'Bagas', 2024, 2);1819SELECT * FROM mahasiswa;nim | nama | angkatan | jurusan_id 2410511001 | Rizky | 2024 | 1 2410511002 | Sinta | 2024 | 1 2410512001 | Bagas | 2024 | 2
Batasan menjaga data tetap benar
| Batasan | Artinya |
|---|---|
PRIMARY KEY | Unik dan tidak boleh kosong |
NOT NULL | Wajib diisi |
UNIQUE | Tidak boleh ada nilai yang sama |
CHECK (syarat) | Nilai harus memenuhi syarat |
DEFAULT nilai | Nilai bawaan jika tidak diisi |
REFERENCES tabel(kolom) | Foreign key: harus merujuk data yang ada |
DBMS menolak data yang melanggar batasan:
1INSERT INTO mahasiswa VALUES ('2410511001', 'Dewi', 2024, 1);Error: UNIQUE constraint failed: mahasiswa.nim
NIM 2410511001 sudah dipakai Rizky, jadi baris baru ditolak.
Foreign key di SQLite
SQLite baru menegakkan aturan foreign key setelah perintah PRAGMA foreign_keys = ON; dijalankan. MySQL (dengan mesin InnoDB) dan PostgreSQL menegakkannya secara bawaan.
Jenis-jenis relasi
| Relasi | Contoh | Cara menyimpan |
|---|---|---|
| Satu ke satu | Mahasiswa dan kartu mahasiswa | Foreign key yang juga UNIQUE |
| Satu ke banyak | Satu jurusan punya banyak mahasiswa | Foreign key di tabel "banyak" (mahasiswa.jurusan_id) |
| Banyak ke banyak | Mahasiswa mengambil banyak mata kuliah, mata kuliah diambil banyak mahasiswa | Tabel penghubung, misalnya krs(nim, kode_mk) |
Cek pemahaman
Relasi antara mahasiswa dan mata kuliah yang diambilnya disimpan dengan cara apa?
Latihan
Rancang tabel peminjaman
Rancang tabel untuk perpustakaan: anggota, buku, dan peminjaman. Peminjaman mencatat anggota yang meminjam, buku yang dipinjam, tanggal pinjam, dan tanggal kembali (boleh kosong jika belum kembali). Tulis perintah CREATE TABLE-nya.
Pembahasan
1CREATE TABLE anggota (2 id INTEGER PRIMARY KEY,3 nama TEXT NOT NULL,4 email TEXT UNIQUE5);67CREATE TABLE buku (8 id INTEGER PRIMARY KEY,9 judul TEXT NOT NULL10);1112CREATE TABLE peminjaman (13 id INTEGER PRIMARY KEY,14 anggota_id INTEGER NOT NULL REFERENCES anggota(id),15 buku_id INTEGER NOT NULL REFERENCES buku(id),16 tanggal_pinjam TEXT NOT NULL,17 tanggal_kembali TEXT18);Relasi anggota dan buku adalah banyak ke banyak (seorang anggota meminjam banyak buku, sebuah buku dipinjam banyak anggota dari waktu ke waktu), sehingga tabel peminjaman menjadi penghubungnya. tanggal_kembali tidak diberi NOT NULL, karena kosong berarti bukunya belum dikembalikan.