En el nivel lógico , el correo electrónico es la clave natural. En el nivel físico , dado que está utilizando una base de datos relacional, la clave natural no encaja bien como clave principal. La razón es principalmente los problemas de rendimiento mencionados por otros.
Por esa razón, el diseño se puede adaptar. La clave natural se convierte en la clave alternativa (ÚNICA, NO NULA), y utiliza una clave sustituta / artificial / técnica como clave principal, que puede ser un incremento automático en su caso.
systemmpuntoout preguntó,
¿Qué pasa si alguien quiere cambiar su dirección de correo electrónico? ¿Vas a cambiar todas las claves foráneas también?
Para eso es en cascada .
Otra razón para usar una clave sustituta numérica como clave principal está relacionada con el funcionamiento de la indexación en su plataforma. En InnoDB de MySQL, por ejemplo, todos los índices de una tabla tienen la clave principal preestablecida, por lo que desea que la PK sea lo más pequeña posible (por razones de velocidad y tamaño). También relacionado con esto, InnoDB es más rápido cuando la clave primaria se almacena en secuencia, y una cadena no ayudaría allí.
Otra cosa a tener en cuenta al usar una cadena como una clave alternativa es que usar un hash de la cadena real que desea puede ser más rápido, omitiendo elementos como mayúsculas y minúsculas de algunas letras. (De hecho, aterricé aquí mientras buscaba una referencia para confirmar lo que acabo de decir; todavía busco ...)