Mysql
 sql >> Database >  >> RDS >> Mysql

Chiavi Estere - Cosa fanno per me?

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'