Fremmednøgler giver referentiel integritet. Dataene i en fremmednøglekolonne er valideret - værdien kan kun være en, der allerede findes i tabellen og kolonnen defineret i fremmednøglen. Det er meget effektivt til at stoppe "dårlige data" - nogen kan ikke indtaste, hvad de vil - tal, ASCII-tekst osv. Det betyder, at dataene er normaliseret - gentagne værdier er blevet identificeret og isoleret til deres egen tabel, så der er ikke flere bekymringer om håndtering af store og små bogstaver i tekst... og værdierne er konsekvente. Dette fører til den næste del - fremmednøgler er det, du bruger til at forbinde tabeller med.
Din forespørgsel efter de projekter, en bruger har ville ikke fungere - du refererer til en kolonne fra USERS
tabel, når der ikke er nogen reference til tabellen i forespørgslen, og der ikke er nogen underforespørgsel, der bruges til at få disse oplysninger, før den linkes til PROJECTS
bord. Det du virkelig ville bruge er:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'