Mysql отношения между таблицами

0

У меня есть вопрос о том, какое наилучшее решение для установления отношений между таблицами: У меня есть:

  • таблица клиентов с именем id sector_id deleg_id
  • таблица секторов с идентификатором
  • таблица делегирования с именем id sector_id

Мой вопрос заключается в том , что хорошей практикой является наличие как внешних ключей в таблице клиентов, так и просто ключ 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;

}
  • 0
    Это очень субъективный вопрос. Это во многом зависит от данных и того, как вы планируете их использовать.
  • 0
    Пожалуйста, покажите нам пример данных и опишите логические отношения между тремя таблицами.
Показать ещё 2 комментария
Теги:
foreign-keys
relational-database

1 ответ

0
Лучший ответ

Основываясь на вашем обновленном вопросе -

Если каждый Client принадлежит Delegation, то Client субъект должен иметь delegation_id внешнего ключа.

Если каждая из Delegation принадлежит Sector, то у Delegation должен быть внешний ключ sector_id.

И если каждый Sector принадлежит к Zone, объект Sector должен иметь внешний ключ zone_id.

Таким образом, вы sector_id бы свой внешний ключ sector_id из своего объекта Client и использовали связь через объект Delegation для поиска всех объектов Client в рамках данного Sector, если это когда-либо было необходимо.

  • 0
    это ответ, который я ищу, чтобы добиться эффективности в индексации моей базы данных. Спасибо
  • 0
    Потрясающие. Пожалуйста.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню