Это хорошая практика, чтобы использовать электронную почту в качестве идентификатора в MySQL DB?
Я прочитал, возможно, вопросы и ответы относительно простоты базы данных MySQL и хорошей практики.
У меня есть база данных mysql с таблицей "клиенты". У каждого добавленного клиента есть электронная почта, которая уникальна для электронных писем. При использовании C++ Builder возникают проблемы с добавлением записей, вызванные автоматическим увеличением поля идентификатора - вынуждая вручную увеличивать идентификатор во время добавление новых строк с использованием DBEXPRESS.
Почему бы не пропустить автоматически увеличенный идентификатор? Будет ли хорошей практикой иметь таблицу без идентификатора (с автоинкрементом) и иметь адрес электронной почты в качестве уникального ключа? Это решило бы проблему DBEXPRESS.
2 ответа
Нет: не используйте электронную почту в качестве первичного ключа. Есть несколько причин, почему:
- Вы никогда не сможете хранить людей, у которых нет адреса электронной почты, что вы, возможно, захотите сделать по разным причинам.
- Это делает ключ очень "широким", поэтому внешние ключи также широки, что приводит к значительному расходу дискового пространства и более медленным запросам, потому что на страницу ввода-вывода меньше записей индекса
- Люди могут изменить свой адрес электронной почты - как вы справитесь с этим, если это первичный ключ?
- Ваши запросы будут менее интуитивно понятны, потому что большинство кодировщиков баз данных ожидают, что будет ключ автоинкремента под названием
id
, Соответствие отраслевым стандартам является хорошей практикой.
Концептуально, да, это хорошая идея, чтобы не генерировать искусственные уникальные ключи (или, по крайней мере, ограничить эти экземпляры). А также e-mail
служит этому естественному уникальному ключевому назначению.
Тем не менее, я бы беспокоился о производительности. Наличие целого числа в качестве идентификатора довольно удобно при выполнении запросов, и поиск в них намного быстрее, чем в длинных строках... Не имеет значения, если вы просто извлекаете пользователя из базы данных, используя адрес электронной почты. Но это важно, если у вас есть сложные запросы с несколькими объединениями.
Кроме того, если вы храните информацию о клиентах в нескольких таблицах, внешними ключами для другой таблицы будет адрес электронной почты. Это означает, что вы сохраняете адрес электронной почты несколько раз, что усложняет обновление информации, если клиент когда-нибудь решит изменить свою электронную почту.