Я борюсь со следующей проблемой, касающейся первичных идентификаторов в mysql:
Я получил сущность Client
и сущность Purchase
, где один клиент имеет ноль для множества покупок, а покупка имеет точноодин клиент.
Когда я создаю покупку, я хочу назначить свой собственный первичный ключ, который ссылается на клиента, и текущий номер, например abc1, для первой покупки для клиента abc.Таблица покупок может выглядеть следующим образом:
id | client
abc1 | abc
abc2 | abc
def1 | def
abc3 | abc
def2 | def
Мое приложение использует symfony2 с doctrine2, поэтому я некоторое время искал и думал, а затем реализовал метод createPurchase в PurchaseRepository, который считывает количество покупок для определенногоклиент добавляет один и возвращает созданную покупку с уже добавленным идентификатором:
public function createPurchase($client){
$amount = $this->getAmountForClient($client) + 1;
$id= $client->getId() . $amount ;
return new Purchase($id);
}
В этом решении есть некоторые проблемы:
- Добавление нескольких объектов без сброса приводит кдублированный первичный идентификатор
- Одновременный запуск сценария может привести к дублированию первичных идентификаторов
Есть ли другой способ, о котором я сейчас не знаю, который может решить мои проблемы?Я делаю это совершенно неправильно?Любая помощь приветствуется!