Due cose di teoria dei database che magari non sai.
Chiavi primarie e uniche non sono la stessa cosa. Su una tabella puoi avere
una chiave primaria e varie chiavi uniche.
Il compito di una chiave unica è mettere un vincolo sui dati, in maniera che
il database possa scegliere se accettare o rifiutare l'inserimento o la
modifica di un record (e.g. una email può corrispondere ad un solo utente).
Il compito di una chiave primaria è ottimizzare le ricerche. Cercare per
chiave unica garantisce la massima performance possibile per il DBMS
(e.g. dammi l'utente numero 123).
Per come sono fatti i DB, una chiave primaria è sempre anche unica.
Detto questo, le chiavi primarie possono essere surrogate o naturali.
Le chiavi surrogate sono campi extra che metti nella tabella, ovverso il
famoso ID. E' il metodo più comune di identificare un record dai tempi
preistorici dell'informatica.
Le chiavi naturali sono formate a partire da altri campi della tabella,
nel tuo caso nome e cognome. Pro: non ti serve né ID né campo extra per
avere una ricerca ottima, contro: devi essere sicuro sia una combinazione
unica in ogni caso, e di avere tutti i campi necessari quando fai una
ricerca (e.g. se la chiave è nome/cognome, se hai solo il nome o solo il
cognome la ricerca non è ottima).
Nella pratica, dirai tu?
I DBA preferiscono sempre le chiavi naturali, ma raramente c'è una
combinazione di campi simile nel mondo reale, o comunque tale da avere
la massima performance su ogni possibile query che le applicazioni finali
vogliono fare.
I programmatori di solito mettono solo chiavi surrogate perché in media
o non sanno una cippa di teoria, o non seguono un progetto :)
Ciao!