На логічному рівні електронний лист - це природний ключ. На фізичному рівні, якщо ви використовуєте реляційну базу даних, природний ключ не добре підходить як первинний ключ. Причиною є, головним чином, питання ефективності, згадані іншими.
З цієї причини дизайн може бути адаптований. Природний ключ стає альтернативним ключем (УНІКАЛЬНИЙ, НЕ НУЛЬНИЙ), і ви використовуєте сурогатний / штучний / технічний ключ як основний ключ, який може бути автоматичним збільшенням у вашому випадку.
запитав systempuntoout,
Що робити, якщо хтось хоче змінити свою електронну адресу? Чи збираєтесь ви також змінити всі зовнішні ключі?
Ось для чого це каскад .
Ще одна причина використання числового сурогатного ключа в якості основного ключа пов'язана з тим, як працює індексація на вашій платформі. Наприклад, у InnoDB MySQL, наприклад, у всіх індексах таблиці є попередній ключ до них, тому ви хочете, щоб ПК був якомога меншим (для скорочення та розміру). Також пов'язано з цим, InnoDB швидше, коли первинний ключ зберігається в послідовності, і рядок не допоможе там.
Інша річ, яку слід врахувати, використовуючи рядок як альтернативний ключ, - це те, що використання хешу фактичної рядки, яку ви хочете, може бути швидше, пропускаючи такі речі, як верхні та нижні регістри деяких літер. (Я фактично приземлився тут, шукаючи посилання, щоб підтвердити сказане щойно; все ще шукаю ...)