No nível lógico , o email é a chave natural. No nível físico , desde que você esteja usando um banco de dados relacional, a chave natural não se encaixa bem na chave primária. O motivo é principalmente os problemas de desempenho mencionados por outros.
Por esse motivo, o design pode ser adaptado. A chave natural se torna a chave alternativa (UNIQUE, NOT NULL) e você usa uma chave substituta / artificial / técnica como chave primária, o que pode ser um incremento automático no seu caso.
systempuntoout perguntou,
E se alguém quiser alterar seu endereço de email? Você vai mudar todas as chaves estrangeiras também?
É para isso que serve a cascata .
Outro motivo para usar uma chave substituta numérica como chave primária está relacionado a como a indexação funciona em sua plataforma. No InnoDB do MySQL, por exemplo, todos os índices em uma tabela têm a chave primária pendente, então você deseja que o PK seja o menor possível (por questões de velocidade e tamanho). Também relacionado a isso, o InnoDB é mais rápido quando a chave primária é armazenada em sequência, e uma string não ajudaria lá.
Outra coisa a ser levada em consideração ao usar uma string como chave alternativa é que o uso de um hash da string que você deseja pode ser mais rápido, ignorando coisas como letras maiúsculas e minúsculas. (Na verdade, cheguei aqui enquanto procurava uma referência para confirmar o que acabei de dizer; ainda estou procurando ...)