带有额外列的多对多自引用原则

Posted

技术标签:

【中文标题】带有额外列的多对多自引用原则【英文标题】:Doctrine many to many self referencing with extra columns 【发布时间】:2013-08-14 11:24:24 【问题描述】:

我正在研究教义,我在多对多自引用中遇到了一些问题,它有一些额外的字段。 让我们描述一下我的场景: 我有一个名为 Drug 的表,药物之间可能存在冲突,并且这种冲突可能在某些情况下出现并可能有一些解决方案。

我已经阅读了关于多对多关系的原则文档,并提到 JoinTable 有一些额外的文件是不好的。 那么这个问题的最佳解决方案是什么?

这是我的解决方案,但我不确定这是不是最好的解决方案。

class Drug
..
/**
 * @var DrugConfilict
 * 
 * @ORM\OneToMany(targetEntity="DrugConfilict", mappedBy="drug1")
 */
private $drugConfilict1s;

/**
 * @var DrugConfilict
 * 
 * @ORM\OneToMany(targetEntity="DrugConfilict", mappedBy="drug2")
 */
private $drugConfilict2s;


class DrugConfilict

/**
 * @var string
 *
 * @ORM\Column(name="confilict_conditions", type="text", nullable=true)
 */
private $confilictConditions;

/**
 * @var string
 *
 * @ORM\Column(name="what_should_do", type="text", nullable=true)
 */
private $whatShouldDo;

/**
 * @var Drug
 * 
 * @ORM\ManyToOne(targetEntity="Drug", inversedBy="drugConfilict1s")
 * @ORM\JoinColumn(name="drug1_id", referencedColumnName="id")
 */
private $drug1;

/**
 * @var Drug
 * 
 * @ORM\ManyToOne(targetEntity="Drug", inversedBy="drugConfilict2s")
 * @ORM\JoinColumn(name="drug2_id", referencedColumnName="id")
 */
private $drug2;

感谢您的回答:)

【问题讨论】:

【参考方案1】:

您提供的解决方案是正确的。也许如果您能描述实际冲突的性质,它们可能是更好的数据模型或数据处理。

【讨论】:

感谢您的回答! '描述实际冲突的性质'是什么意思? 根据“现实世界”中的冲突情况,最好将其建模为One Conflict to Many Drugs

以上是关于带有额外列的多对多自引用原则的主要内容,如果未能解决你的问题,请参考以下文章

sqlalchemy中的多对多自引用关系

如何使用带有额外列的多对多映射保存对象?

从教义中的多对多自引用实体中获取孩子

通过联结表进行多对多自连接

多对多自引用表

Sequelize 多对多自引用