It would be perfectly reasonable to use an email address only where a fairly narrow set of criteria are met:
- The email address is the primary entity, it doesn't identify something else (like a user account, say)
- There are relatively few FK references to the table or fast FK lookups without joins are vital
- You don't validate email addresses in any way
In other words it's very rarely appropriate to use an email address as a primary key. The only situation I can really think of where it'd be sensible is software that processes a mail stream, where it wants to record stats about each individual email address.
If you're thinking of using it as an identifier for users, don't do it.
The email address its self is the primary entity
You're not using an email address to identify something else, like a user account say, but instead have a table that's all about email addresses. Say, you're keeping track of how many messages went to/from each address. If you're identifying something else with an email address, don't use it as a primary key. Use a surrogate key if there's no perfectly stable small and simple natural key. Names and email addresses change.
There are relatively few foreign key references
There aren't too many FK references to the table that has the email address as primary key, or you require very fast and join-free lookups in the tables with the FK. You can gain a big performance win if you're searching a table directly for a value (the email), rather than joining on another table and testing the other table for the value. The flip side here is that using email addresses instead of generated surrogate keys adds to the storage needed for tables (thus: bigger, slower tables and indexes) so it's only worthwhile if you really expect to search on foreign keys a lot.
You don't validate email addresses
If you have such a concept as a "valid" or "invalid" email address your rules will change sooner or later, and you'll be in a miserable situation if you're using email addresses as primary keys.
Email addresses are weird
These three email addresses are the same:
user.name@DOMAIN.COM
user.name@DoMAIN.CoM
user.name@domain.com
but these three are all different:
user.name@domain.com
USER.NAME@domain.com
User.Name@domain.com
according to the relevant RFC. Some MTAs agree, others treat the whole thing case-insensitively.
Yeah. Don't use them as PKs.