Tablice, redci i ključevi
What you'll learn
- razlikovati tablice, retke i stupce i objasniti zašto svaki redak treba primarni ključ (obično
id) - pronaći veze među tablicama po vanjskom ključu:
orders.user_id → users.id - razlikovati surogatni ključ (
IDENTITY, ) od prirodnog (email, ISBN) i obrazložiti zašto se primarni ključ ne smije mijenjati - učvrstiti jedinstvenost polja poput
emailograničenjemUNIQUE, a da ga ne učiniš primarnim ključem
Popis je otvoren. QUERY iznad radnog stola razvija hologram: tisuće zapisa lebde u zraku u urednoj mreži, a između nekih se protežu tanke jantarne niti. Posegneš za jednom — zazvoni poput strune. Ovo nije hrpa datoteka. Ovo je tkanina.
Tablice, redci, stupci
Relacijska baza nalik je urednom katalogu: podaci su razloženi po tablicama, a unutar svake tablice postoje stupci (koja svojstva čuvamo) i redci (konkretni zapisi).
Uzmi tablicu kupaca users: svaki je redak jedan kupac stare Zemlje, a stupci opisuju njegov id, full_name, email, country, city, signup_date.
Da se ljudi s istim imenima ne bi pomiješali, svaki redak ima primarni ključ () — jedinstveni identifikator, obično stupac id. Preko njega druge tablice mogu uputiti na taj redak pomoću vanjskog ključa (). Primjerice, u narudžbi orders postoji user_id — tako narudžba pamti svoga kupca. Upravo su one jantarne niti na hologramu veze po ključevima.
QUERY: Dok je ključ cijel — cijela je i nit. Prošlo je stoljeće i pol, a svaka narudžba još uvijek pamti svoga čovjeka.
Pokreni upit i pogledaj kako izgledaju kupci Kotomarketa — zapisi koje nitko nije otvarao od vremena stare Mreže:

Tables, rows, columns
A relational database is like a tidy catalog: the data is sorted into tables, and inside each table there are columns (what properties we store) and rows (the individual records).
Take the buyers’ table users: each row is one buyer from old Earth, and the columns describe their id, full_name, email, country, city, signup_date.
So that people with the same name don’t get confused, every row has a — a unique identifier, usually the id column. Through it, other tables can reference this row using a . For example, an order in orders has a user_id — that’s how an order remembers its buyer. Those amber threads on the hologram are exactly these key-based links.
QUERY: As long as the key holds, the thread holds. A century and a half on, every order still remembers its person.
Run the query and see what Kotomarket’s buyers look like — records no one has opened since the days of the old Net:
| id | full_name | city | signup_date |
|---|---|---|---|
| 1 | Артём Волков | Санкт-Петербург | 2024-10-20 |
| 2 | Екатерина Алексеев | Екатеринбург | 2025-01-25 |
| 3 | Николай Никитин | Алматы | 2024-09-21 |
| 4 | Екатерина Иванов | Новосибирск | 2024-05-04 |
| 5 | Елена Петров | Казань | 2025-01-05 |
| 6 | Ирина Кузнецов | Новосибирск | 2024-09-12 |
Primarni ključ pomaže nepogrešivo pronaći jedan redak (obično id). Vanjski ključ povezuje tablice: primjerice, orders.user_id → users.id pokazuje čija je to narudžba. Dalje će QUERY razviti pred tobom cijelu kartu snimke — svih pet tablica u cijelosti.
orders.user_id upućuje na primarni ključ users.id — tako narudžba pamti svoga kupca.Prirodni ili surogatni ključ
Otkud dolazi primarni ključ? Putovi su dva. Prirodni ključ je stvarni atribut koji je ionako jedinstven: email kupca, ISBN knjige, kod valute. Surogatni ključ je umjetni identifikator bez značenja u vanjskome svijetu: automatska numeracija ili . U Kotomarketu se posvuda koriste surogatni id — i to je tipično rješenje:
-- Surogatni ključ: baza sama izdaje sljedeći broj (PostgreSQL)
CREATE TABLE users (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
email TEXT NOT NULL UNIQUE, -- prirodni kandidat živi uz njega kao UNIQUE
full_name TEXT NOT NULL
);
Zašto tako? Glavno svojstvo primarnog ključa: on se ne smije mijenjati. Na PK upućuju vanjski ključevi drugih tablica, a promjena vrijednosti povukla bi za sobom ažuriranje svih niti odjednom — u orders, u events, posvuda. A „vječnih” prirodnih atributa gotovo da i nema: ljudi mijenjaju email i prezimena, telefoni se sele, čak se i ISBN ponovno izdaje. Surogatni id ne mijenja se nikada — upravo zato što ništa ne znači.
Zahtjevi za svaki primarni ključ: jedinstven, nije NULL, stabilan. Prirodne ključeve ostavi malim nepromjenjivim šifrarnicima — primjerice, kodu valute 'RUB' iz ISO 4217. A jedinstvenost prirodnog kandidata poput email učvrsti zasebnim ograničenjem UNIQUE, kao u primjeru gore: veze ostaju, podaci ostaju pošteni, a kupcu nije zabranjeno promijeniti adresu e-pošte.
Zalijećemo se unaprijed: sama sintaksa za stvaranje tablica i ograničenja (CREATE TABLE, PRIMARY KEY, UNIQUE) tema je 9. poglavlja. Ovdje gledaj strukturu ključa, a ne naredbu: da je surogatni id postao primarni ključ, a email živi uz njega kao UNIQUE.
Interview question
Pitanje s razgovora za posao: po čemu se surogatni ključ razlikuje od prirodnog i koji bi odabrao za tablicu korisnika?
Snažan odgovor: prirodni je stvarni jedinstveni atribut (email, ISBN), surogatni je umjetni identifikator (IDENTITY stupac ili ). Za korisnike — surogatni: primarni se ključ ne smije mijenjati jer na njega upućuju vanjski ključevi, a email ljudi mijenjaju. Jedinstvenost emaila pritom se učvršćuje zasebnim UNIQUE ograničenjem. Prirodni je ključ opravdan u stabilnim šifrarnicima poput kodova valuta ISO 4217.