Привет! Подскажите пожалуйста. Есть сущности:
Discipline
- id
- kind
- nomination
....
Event Discipline
- event
- id
....
Registration
- id
....
- disipline id
....
Disсipline - это информационная таблица
Event Disсipline - это связующая таблица для конкретного мероприятия.
Registration - Это регистрация на мероприятие, в котором есть поле dicipline_id
Вот всё на php:
Discipline/**
* @ORM\Entity
* @ORM\Table(name="discipline_disciplines", uniqueConstraints={
* @ORM\UniqueConstraint(columns={"kind_id", "age_id", "nomination_id", "level_id"})
* })
*/
class Discipline implements AggregateRoot
{
use EventTrait;
/**
* @var Id
* @ORM\Id
* @ORM\Column(type="discipline_discipline_id")
*/
private $id;
/**
* @var Kind
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Disciplines\Discipline\Kind\Kind")
* @ORM\JoinColumn(name="kind_id", referencedColumnName="id", nullable=false)
*/
private $kind;
/**
* @var Age|null
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Disciplines\Discipline\Age\Age")
* @ORM\JoinColumn(name="age_id", referencedColumnName="id", nullable=true)
*/
private $age;
/**
* @var Nomination|null
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Disciplines\Discipline\Nomination\Nomination")
* @ORM\JoinColumn(name="nomination_id", referencedColumnName="id", nullable=true)
*/
private $nomination;
/**
* @var Level|null
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Disciplines\Discipline\Level\Level")
* @ORM\JoinColumn(name="level_id", referencedColumnName="id", nullable=true)
*/
private $level;
/**
* @var int
* @ORM\Column(type="integer")
*/
private $quantityUse;
}
Event Discipline/**
* @ORM\Entity()
* @ORM\Table(name="event_events_competitions_registrations_diciplines", indexes={
* @ORM\Index(columns={"status"})
* })
*/
class Discipline
{
public const STATUS_OPEN = 'open';
public const STATUS_CLOSED = 'closed';
/**
* @var Event
* @ORM\ManyToOne(targetEntity="\App\Model\Event\Entity\Events\Event\Event", inversedBy="events")
* @ORM\JoinColumn(name="event_id", referencedColumnName="id", nullable=false)
*/
private $event;
/**
* @var Id
* @ORM\Column(type="event_events_registrations_competitions_discipline_id")
* @ORM\ManyToOne(targetEntity="\App\Model\Event\Entity\Disciplines\Discipline\Discipline\Discipline", inversedBy="events", cascade={c})
* @ORM\JoinColumn(name="id", referencedColumnName="id", nullable=false)
* @ORM\Id
*/
private $id;
/**
* @var Price[]|ArrayCollection
* @ORM\OneToMany(
* targetEntity="\App\Model\Event\Entity\Events\Registrations\Competition\Discipline\Price\Price",
* mappedBy="discipline",
* orphanRemoval=true,
* cascade={"all"}
* )
*/
private $prices;
/**
* @var string
* @ORM\Column(type="string", length=16)
*/
private $status;
}
Registration/**
* @ORM\Entity
* @ORM\Table(name="event_events_competitions_registrations", uniqueConstraints={
* @ORM\UniqueConstraint(columns={"event_id", "number"})
* })
*/
class Registration
{
/**
* @var Event
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Events\Event\Event", inversedBy="events")
* @ORM\JoinColumn(name="event_id", referencedColumnName="id", nullable=false)
*/
private $event;
/**
* @var Id
* @ORM\Column(type="event_events_registrations_competitions_registration_id")
* @ORM\Id
*/
private $id;
/**
* @var Number
* @ORM\Embedded(class="Number", columnPrefix=false)
*/
private $number;
/**
* @var City
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Geo\City\City")
* @ORM\JoinColumn(name="city_id", referencedColumnName="id", nullable=false)
*/
private $city;
/**
* @var Discipline
* @ORM\ManyToOne(targetEntity="App\Model\Event\Entity\Events\Registrations\Competition\Discipline\Discipline", inversedBy="event")
* @ORM\JoinColumn(name="discipline_id", referencedColumnName="id", nullable=false)
*/
private $discipline;
}
Так как эта таблица имеет не только два связующих ключа, но и другие условия, то я решил сделать связь так, что
Discipline.Id === EventDiscipline.Id.
Два вопроса:
1. Правильно ли я сделал
Discipline.Id === EventDiscipline.Id
или лучше это переделать:
- id //Свой уникальный id
- event_id //ID мероприятия
- discipline_id //ID дисциплины
и id у связующей таблицы будет свой, а не из
Discipline.Id
. Если нужно изменить на такое, то в регистрации я присваиваю id дисциплины. Нужно ли поменять этот id на
EventDiscipline.Id
?
2. Правильно ли я настроил связи промежуточной таблицы? Если нет, то как правильно?
Если есть какие ещё недочёты? Благодарю!
PS: ID храню как
UUID