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.

SQL
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;
Hasil
nim | nama | angkatan | jurusan_id
2410511001 | Rizky | 2024 | 1
2410511002 | Sinta | 2024 | 1
2410512001 | Bagas | 2024 | 2

Batasan menjaga data tetap benar

Batasan pada kolom
BatasanArtinya
PRIMARY KEYUnik dan tidak boleh kosong
NOT NULLWajib diisi
UNIQUETidak boleh ada nilai yang sama
CHECK (syarat)Nilai harus memenuhi syarat
DEFAULT nilaiNilai bawaan jika tidak diisi
REFERENCES tabel(kolom)Foreign key: harus merujuk data yang ada

DBMS menolak data yang melanggar batasan:

SQL
1INSERT INTO mahasiswa VALUES ('2410511001', 'Dewi', 2024, 1);
Hasil
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 antartabel
RelasiContohCara menyimpan
Satu ke satuMahasiswa dan kartu mahasiswaForeign key yang juga UNIQUE
Satu ke banyakSatu jurusan punya banyak mahasiswaForeign key di tabel "banyak" (mahasiswa.jurusan_id)
Banyak ke banyakMahasiswa mengambil banyak mata kuliah, mata kuliah diambil banyak mahasiswaTabel 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.

Tandai pelajaran ini selesai

Masuk ke aplikasi untuk mencatat kemajuan, lalu lanjutkan ke pelajaran berikutnya dari perangkat mana pun.

Buka di aplikasi