Materi
Kunci asing adalah kolom di satu tabel yang merujuk kunci primer tabel lain. Tabel yang dirujuk disebut induk, tabel yang merujuk disebut anak. Integritas referensial berarti setiap nilai kunci asing punya pasangan di induk. Baris anak yang merujuk induk yang tidak ada disebut rekaman yatim; Microsoft mencontohkan pesanan yang merujuk pelanggan yang tidak ada. Dokumentasi SQLite menjelaskan asalnya: baris dimasukkan tanpa pasangan, atau baris induk dihapus sehingga anaknya tertinggal.
CREATE TABLE peminjaman (
id INTEGER PRIMARY KEY,
buku_id INTEGER NOT NULL REFERENCES buku(id) ON DELETE RESTRICT,
anggota_id INTEGER NOT NULL REFERENCES anggota(id)
);
-- Mencari baris yatim di data yang sudah ada:
SELECT pj.id FROM peminjaman pj
LEFT JOIN anggota a ON a.id = pj.anggota_id
WHERE a.id IS NULL;Kunci asing yang ditegakkan menolak baris yatim saat INSERT. Aksi ON DELETE menentukan apa yang terjadi pada anak ketika induknya dihapus: NO ACTION (bawaan) dan RESTRICT menolak penghapusan selama masih ada anak, CASCADE ikut menghapus anaknya, dan SET NULL mengosongkan kunci asing anaknya. PostgreSQL memberi pedoman: CASCADE cocok bila anak adalah bagian dari induk dan tidak bisa berdiri sendiri, misalnya baris item pesanan; RESTRICT atau NO ACTION cocok bila keduanya objek yang berdiri sendiri; SET NULL cocok bila rujukannya informasi opsional.