Должен ли идентификатор объекта быть адресом электронной почты или не связанным с бизнесом числовым идентификатором? - PullRequest
0 голосов
/ 09 июля 2019

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

Я читал, как люди реализуют это с помощью Symfony 4 и Doctrine ORM, и все позволяют Doctrine создавать числовой идентификатор, который будет идентификатором сущности. На основании моей схемы, я должен это сделать?

Вот что у меня есть на данный момент:

 /**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 * @UniqueEntity(
 *     fields="email",
 *     message="error.email_already_registered"
 * )
 */
class User implements UserInterface
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="string", length=180, unique=true)
     * @Assert\NotBlank
     * @Assert\Email
     * @Assert\Length(min=4,max=180)
     */
    private $email;

Должен ли он быть похож на следующий код?

/**
 * @ORM\Entity(repositoryClass="App\Repository\UserRepository")
 */
class User implements UserInterface
{
    /**
     * @ORM\Column(type="string", length=180)
     * @ORM\Id()
     * @Assert\Email
     * @Assert\Length(min=4,max=180)
     */
    private $email;

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Не смущайтесь об УНИКАЛЬНОМ И ПЕРВИЧНОМ КЛЮЧЕ.УНИКАЛЬНОЕ значение может измениться, но ПЕРВИЧНЫЙ КЛЮЧ никогда не должен изменяться, НО оба являются INDEX

Так, для вашего случая, электронная почта может измениться в вашей бизнес-логике или нет?

Если да, не добавляйте егокак ПЕРВИЧНЫЙ КЛЮЧ, должен быть только УНИКАЛЬНЫЙ ИНДЕКС.В противном случае, вы можете использовать его в качестве первичного ключа.

0 голосов
/ 09 июля 2019

«Должно быть» зависит от ваших требований.Вполне нормально использовать как уникальный числовой идентификатор, так и устанавливать поле электронной почты уникальным (как показано в первом фрагменте).Это помогает построить отношения между пользовательским объектом и другими объектами, поскольку у них есть «простое» поле, которое будет использоваться для объединения таблиц.

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

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