Mysql表之间的关系

Mysql relationship between tables

我现在有一个问题,在 table 之间建立关系的最佳解决方案是什么: 我有:

我的问题是 在客户端 table 中同时拥有两个外键是一个好习惯还是仅 delegation_id 的键就足以在客户table(当然有加入tables)

解释更多 每个代表团属于一个部门。 每个扇区属于一个区域 每个客户都属于一个代表团,该代表团属于按地理区域分组的部门

这是我的实体文件: Class 客户

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 部门

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 代表团

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 属于一个 DelegationClient 实体应该有一个 delegation_id 外键。

如果每个 Delegation 属于一个 SectorDelegation 实体应该有一个 sector_id 外键。

并且如果每个 Sector 属于一个 Zone,则 Sector 实体应该有一个 zone_id 外键。

因此,您将从 Client 实体中删除 sector_id 外键,并使用通过 Delegation 实体的关系来查找给定内的所有 Client 实体Sector,如果需要的话。