На логическом уровне электронное письмо является естественным ключом.
На уровне физический , если вы используете реляционную базу данных, естественный ключ не подходит как первичный ключ. Причина в основном в проблемах производительности, упомянутых другими.
По этой причине дизайн может быть адаптирован. Естественный ключ становится альтернативным ключом (UNIQUE, NOT NULL), и вы используете суррогатный / искусственный / технический ключ в качестве первичного ключа, который может быть автоматически увеличен в вашем дело.
systemmpuntoout спросил,
Что если кто-то захочет изменить свой адрес электронной почты? Собираетесь ли вы также изменить все внешние ключи?
Вот для чего каскад .
Другая причина использования числового суррогатного ключа в качестве первичного ключа связана с тем, как работает индексация на вашей платформе. Например, в MySQL InnoDB все индексы в таблице имеют первичный ключ, предварительно привязанный к ним, поэтому вы хотите, чтобы PK был как можно меньшим (для скорости и размера). С этим также связано, что InnoDB работает быстрее, когда первичный ключ хранится в последовательности, и строка там не поможет.
Еще одна вещь, которую необходимо учитывать при использовании строки в качестве альтернативного ключа, заключается в том, что использование хэша фактической строки, которую вы хотите, может быть быстрее, пропуская такие вещи, как прописные и строчные буквы некоторых букв. (Я на самом деле приземлился здесь, ища ссылку, чтобы подтвердить то, что я только что сказал; все еще смотрю ...)