У меня есть вопрос о том, какое наилучшее решение для установления отношений между таблицами: У меня есть:
Мой вопрос заключается в том , что хорошей практикой является наличие как внешних ключей в таблице клиентов, так и просто ключ Deleg_id достаточно для индексирования и поиска в таблице клиентов (конечно, с таблицами соединений)
чтобы объяснить, что каждая делегация принадлежит сектору. каждый сектор принадлежит зоне, и каждый Клиент принадлежит к делегации, которая принадлежит к сектору, который сгруппирован в географической области
это мои файлы Entity: клиент класса
class Client {
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="firstName", type="string", length=255)
*/
private $firstName;
/**
* @var string
*
* @ORM\Column(name="lastName", type="string", length=255)
*/
private $lastName;
/**
* @var string
*
* @ORM\Column(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* @var string
*
* @ORM\Column(name="sector", type="string", length=255)
*/
private $sector;
/**
* @var int
*
* @ORM\Column(name="delegation", type="integer")
*/
private $delegation;
}
Классный сектор
class Sector {
/**
* @ORM\Id
* @ORM\OneToMany(targetEntity="AppBundle\Entity\Delegation" ,mappedBy="sector")
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @Assert\NotBlank()
* @ORM\Column(type="string")
*/
private $name;
/**
* @Assert\NotBlank()
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Zone", inversedBy="id")
* @ORM\JoinColumn(nullable=false)
*/
private $zone;
}
класс Делегация
class Delegation {
/**
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
* @ORM\Column(type="integer")
*/
private $id;
/**
* @ORM\Column(type="string")
*/
private $name;
/**
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Sector", inversedBy="id" )
* @ORM\JoinColumn(nullable=false)
*/
private $sector;
}
Основываясь на вашем обновленном вопросе -
Если каждый Client
принадлежит Delegation
, то Client
субъект должен иметь delegation_id
внешнего ключа.
Если каждая из Delegation
принадлежит Sector
, то у Delegation
должен быть внешний ключ sector_id
.
И если каждый Sector
принадлежит к Zone
, объект Sector
должен иметь внешний ключ zone_id
.
Таким образом, вы sector_id
бы свой внешний ключ sector_id
из своего объекта Client
и использовали связь через объект Delegation
для поиска всех объектов Client
в рамках данного Sector
, если это когда-либо было необходимо.