我现在有一个问题:在表之间建立关系的最佳解决方案是什么: 我有:
我的问题是在客户端表中使用外键或只使用delegation_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;
}
答案 0 :(得分:0)
根据您更新的问题 -
如果每个Client
属于Delegation
,则Client
实体应具有delegation_id
个外键。
如果每个Delegation
属于Sector
,则Delegation
实体应具有sector_id
个外键。
如果每个Sector
属于Zone
,则Sector
实体应具有zone_id
个外键。
因此,您将从sector_id
实体中删除Client
外键,并通过Delegation
实体使用该关系查找给定Client
内的所有Sector
个实体1}},如果需要的话。