Le chiavi esterne forniscono l'integrità referenziale. I dati in una colonna di chiave esterna vengono convalidati:il valore può essere solo uno che esiste già nella tabella e nella colonna definita nella chiave esterna. È molto efficace per fermare i "dati errati" - qualcuno non può inserire quello che vuole - numeri, testo ASCII, ecc. Significa che i dati sono normalizzati - i valori ripetuti sono stati identificati e isolati nella propria tabella, quindi non ci sono più preoccupazioni sulla gestione della distinzione tra maiuscole e minuscole nel testo... e i valori sono coerenti. Questo porta alla parte successiva:le chiavi esterne sono ciò che usi per unire le tabelle.
La tua query per i progetti di un utente non funzionerebbe:stai facendo riferimento a una colonna di USERS
table quando non c'è alcun riferimento alla tabella nella query e non c'è alcuna sottoquery utilizzata per ottenere tali informazioni prima di collegarle a PROJECTS
tavolo. Quello che useresti davvero è:
SELECT p.*
FROM PROJECTS p
JOIN USERS u ON u.user_id = p.creator
WHERE u.username = 'John Smith'