Является ли лучше иметь атрибут Id в модели, несмотря на то, что нет необходимости использовать его для уникальной идентификации записей, вместо этого у нас есть другой уникальный идентификатор? - PullRequest
1 голос
/ 01 июля 2019

Лучше ли иметь атрибут Id в модели в качестве первичного ключа, несмотря на то, что нет необходимости использовать его для уникальной идентификации записей? Я использую ядро ​​и сущность asp.net, это моя модель

    public class PreRegistration
    {
        public int Id {get; set;}
        public string PhoneNumber {get; set;}
        public string VerificationCode {get; set;}
    }

Полезно ли / лучше для моей модели иметь целочисленный идентификатор (с автоматическим приращением), когда я могу легко использовать номер телефона в целях идентификации? В ASP.NET Identity Core модель IdentityUser имеет атрибут Id, когда мы можем легко использовать атрибуты Email, UserName и т. Д. Для уникальной идентификации записей. Почему это так?

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Ваш вопрос сводится к "следует ли мне использовать суррогатный ключ или естественный ключ в качестве моего первичного ключа?".

Существует 3 требования дляпервичный ключ.

уникальность - первичный ключ должен быть уникальным, даже несмотря на опечатки, географию или изменения данных.Имена определенно не уникальны.Телефонный номер является уникальным в пределах географии, но вам нужно будет ввести международный телефонный код, чтобы гарантировать уникальность.Ваша модель данных содержит код подтверждения, но не «статус» - поэтому пользователь, введя неправильный номер телефона, может создать дубликаты на номере телефона.Сочетание телефонного номера и кода подтверждения будет уникальным, но вы не захотите использовать его в качестве внешнего ключа, поскольку не знаете, какая запись была проверена.

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

Инвариант - вы можете думать, что номера телефонов не меняются, но это не так.В Лондоне, Великобритания, у нас было несколько изменений телефонных номеров за последние 30 лет.

Итак, ответ на ваш вопрос, вероятно, заключается в использовании суррогатного ключа.

1 голос
/ 01 июля 2019

Рекомендуется иметь суррогатный ключ на столе по нескольким причинам:

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...