Materi
Kunci primer adalah kolom atau gabungan kolom yang mengenali setiap baris secara unik. Dokumentasi PostgreSQL merumuskan syaratnya: nilainya unik dan tidak NULL, dan satu tabel hanya boleh punya satu kunci primer. OpenStax Introduction to Computer Science menjelaskan asalnya: sekumpulan atribut yang mengenali baris secara unik disebut superkey, superkey yang minimal disebut kunci kandidat, dan salah satu kunci kandidat dipilih menjadi kunci primer. Contohnya, kendaraan bisa dikenali lewat nomor rangka atau lewat pasangan pelat nomor dan provinsi.
Kunci alami diambil dari fakta di dunia nyata, misalnya email atau nomor ISBN. Kunci surogat adalah angka buatan yang tidak memuat fakta apa pun. Panduan Access menyarankan kunci yang nilainya tidak akan berubah dan menyebut pengenal tanpa fakta, seperti kolom AutoNumber, cocok karena tidak perlu diubah; nama orang tidak cocok karena dua orang bisa bernama sama. Di SQLite, kolom INTEGER PRIMARY KEY terisi otomatis bila dibiarkan kosong.
CREATE TABLE buku (
id INTEGER PRIMARY KEY, -- kunci surogat
isbn TEXT NOT NULL UNIQUE, -- kunci kandidat alami, dijaga UNIQUE
judul TEXT NOT NULL
);
CREATE TABLE penulis_buku (
buku_id INTEGER,
penulis_id INTEGER,
PRIMARY KEY (buku_id, penulis_id) -- kunci komposit
);Kunci komposit terdiri atas dua kolom atau lebih; SQLite dan PostgreSQL sama-sama mendukungnya. Memakai kunci surogat tidak menghapus kebutuhan kunci alami: tanpa batasan UNIQUE pada isbn, buku yang sama bisa tercatat dua kali dengan id berbeda. Cara menguji apakah sebuah kolom layak jadi kunci kandidat di data yang sudah ada: bandingkan COUNT(*) dengan COUNT(DISTINCT kolom).