Ik vroeg me af wanneer je nou precies een "UNIQUE INDEX" gebruikt. Is het bijvoorbeeld een overkill om een gebruikersnaam of e-mail in te stelen als een "UNIQUE INDEX" als je wilt dat deze maar 1x voorkomt in je applicatie?
Daar is het voor bedoeld. Je kunt dan een nieuw (bijv.) e-mailadres klakkeloos toevoegen aan de database en als die al voorkomt gaat het feest niet door en krijg je een foutmelding terug. Je hoeft dus niet handmatig te controleren of het e-mailadres al voorkomt en dat scheelt weer een query. Zelf moet je de foutmelding dan afvangen en de gebruiker een nette melding geven.
Dan is er nog 1 ding dat ik niet helemaal snap; stel je hebt een tabel met gebruikers waarbij je aangeeft dat de gebruikersnaam UNIQUE moet zijn, waarom kun je deze dan niet als PRIMARY KEY gebruiken? Je kunt bij de relaties immers aangeven dat als de PRIMARY KEY veranderd, deze ook in alle verwijzingen moet veranderen. Waarom zou je in dit geval toch nog gebruik maken van een id?
Je kunt een VARCHAR gebruikersnaam wel gebruiken als primaire sleutel, alleen is een INT id efficiƫnter.
De belangrijkste reden is echter dat gebruikersnaam en id tot een ander datadomein behoren: de id heeft slechts een interne functie in de database en je databasecode, terwijl de gebruikersnaam ook daarbuiten een betekenis heeft, bijvoorbeeld voor de gebruiker zelf.