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


ID名称为扇区_ID委托的客户表
ID名称为扇区的表
ID名称为ector_id的委托表


我的问题是,在客户端表中同时具有外键还是仅在代理表中具有索引和搜索权限(对于联接表而言)就足以代表索引和搜索是好的做法?

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

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

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实体中删除Client外键,并使用通过Delegation实体的关系查找给定Client中的所有Sector实体。

关于php - MySQL之间的关系表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48939825/

10-16 15:42