Это хорошая практика, чтобы использовать электронную почту в качестве идентификатора в MySQL DB?

Я прочитал, возможно, вопросы и ответы относительно простоты базы данных MySQL и хорошей практики.

У меня есть база данных mysql с таблицей "клиенты". У каждого добавленного клиента есть электронная почта, которая уникальна для электронных писем. При использовании C++ Builder возникают проблемы с добавлением записей, вызванные автоматическим увеличением поля идентификатора - вынуждая вручную увеличивать идентификатор во время добавление новых строк с использованием DBEXPRESS.

Почему бы не пропустить автоматически увеличенный идентификатор? Будет ли хорошей практикой иметь таблицу без идентификатора (с автоинкрементом) и иметь адрес электронной почты в качестве уникального ключа? Это решило бы проблему DBEXPRESS.

2 ответа

Нет: не используйте электронную почту в качестве первичного ключа. Есть несколько причин, почему:

  • Вы никогда не сможете хранить людей, у которых нет адреса электронной почты, что вы, возможно, захотите сделать по разным причинам.
  • Это делает ключ очень "широким", поэтому внешние ключи также широки, что приводит к значительному расходу дискового пространства и более медленным запросам, потому что на страницу ввода-вывода меньше записей индекса
  • Люди могут изменить свой адрес электронной почты - как вы справитесь с этим, если это первичный ключ?
  • Ваши запросы будут менее интуитивно понятны, потому что большинство кодировщиков баз данных ожидают, что будет ключ автоинкремента под названием id, Соответствие отраслевым стандартам является хорошей практикой.

Концептуально, да, это хорошая идея, чтобы не генерировать искусственные уникальные ключи (или, по крайней мере, ограничить эти экземпляры). А также e-mail служит этому естественному уникальному ключевому назначению.

Тем не менее, я бы беспокоился о производительности. Наличие целого числа в качестве идентификатора довольно удобно при выполнении запросов, и поиск в них намного быстрее, чем в длинных строках... Не имеет значения, если вы просто извлекаете пользователя из базы данных, используя адрес электронной почты. Но это важно, если у вас есть сложные запросы с несколькими объединениями.

Кроме того, если вы храните информацию о клиентах в нескольких таблицах, внешними ключами для другой таблицы будет адрес электронной почты. Это означает, что вы сохраняете адрес электронной почты несколько раз, что усложняет обновление информации, если клиент когда-нибудь решит изменить свою электронную почту.

Другие вопросы по тегам