Задать вопрос
IgorPI
@IgorPI

Как избежать явного первичного ключа?

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

Сущность ContactHistory очень быстро будет наполняться и есть вероятность что индекс иссякнет (я утрирую)
Я просто хочу сэкономить, зачем использовать явный первичный ключ если он не когда не будет использоваться

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

/**
 * @ORM\Entity(repositoryClass=ContactRepository::class)
 * @ORM\Table(name="contacts")
 */
class Contact
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="bigint")
     */
    private ?int $id;

    ...

    /**
     * @var ArrayCollection|PersistentCollection
     * @ORM\OneToMany(targetEntity="ContactHistory", mappedBy="contact", cascade={"remove"}, fetch="EXTRA_LAZY")
     */
    private $history;
    ...
}



/**
 * @ORM\Entity(repositoryClass=ContactHistoryRepository::class)
 * @ORM\Table(name="contacts_history")
 */
class ContactHistory
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="bigint")
     */
    private int $id;

    /**
     * @var Contact|null
     * @ORM\ManyToOne(targetEntity="Contact", inversedBy="history", cascade={"persist"})
     */
    private ?Contact $contact;
    ...
}
  • Вопрос задан
  • 99 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
IgorPI
@IgorPI Автор вопроса
Сделал по данной статье

Пока так, исключительно для того что бы доктрина успокоилась
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Можно сделать локальный id истории, уникальный в пределах одного контакта.
Получается, будет уникальный id контакта + id истории. Вы емкость одного идентификатора размажете на два.
Сортировать можно, находить нужную запись истории можно. Какая запись истории появилась раньше у соседних контактов - скорее всего нельзя выяснить, если нет сквозного id.
На первый взгляд такие возможности и недостатки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы