I nomi utente devono essere unici, identificano un utente. Le password no. Le password devono essere comunque mantenute segrete. Non puoi dire a un utente "Ehi, scegli un'altra password, un altro utente sta già usando questo". Se è un hacker, lo adorerà!
Non dovresti comunque memorizzare le password. Invece conserva i loro hash. Vedi Hash delle password salate - Farlo bene .
Se hai due colonne che devono essere uniche, la loro combinazione deve essere unica o deve essere univoca in modo indipendente.
Un esempio di una combinazione univoca sono dati mensili identificati per anno e mese memorizzati in due colonne separate. Qui avrebbe senso usare queste due colonne come chiave primaria (PK). Se hai già un altro PK, crea un indice univoco o un vincolo univoco su queste due colonne. Vedi anche Quando dovrei usare un vincolo univoco invece di un indice univoco?
Un esempio di due colonne univoche indipendenti sarebbe un nome utente e un nickname. Il nome utente è utilizzato per gli accessi; il nickname viene mostrato ad altri utenti. Qui userò il nome utente come PK e creerò un indice univoco sul nickname.
Il PK è il mezzo principale per identificare un record. Il PK viene anche referenziato in vincoli di chiave esterna quando si definiscono le relazioni da 1 a n o 1 a 1 tra le tabelle. È una buona pratica non scegliere una colonna il cui valore può cambiare nel tempo. Se agli utenti fosse permesso cambiare il loro nome utente, ad esempio, scegliere una colonna di autoincremento come PK e creare un indice univoco sul nome utente.