Like most modern websites, I would like the user's e-mail address to be their username/"primary key".
The (obvious) problem is that a person's e-mail can change over time.
Is it okay to use some system generated code for the (true) username/primary key, thus allowing users to change their e-mail address if need be?
In such a scenario, I suppose the username/e-mail would be "indexed" to ensure uniqueness?
Finally, if that is the way I went, would I have to worry about users changing their e-mail 20,000 times and thus creating a mess on the backend? (You would likely want to keep a history of each e-mail for contact and legal purposes.)