向原则中添加其他外键约束

问题描述 投票:0回答:1

我具有扩展MainEntity的实体SomeMainEntity。 SomeMainEntity包含GroupEntity以及SubEntity的集合。 SQL将是:

MainEntity

  • id(自动递增整数PK)

SomeMainEntity扩展MainEntity

  • id(association = true =>与main_entity.id一对一的PK / FK)
  • group_entity_id(到group_entity.id的一对多FK)

GroupEntity

  • id(自动递增整数PK)

SubEntity

  • id(自动递增整数PK)
  • some_main_entity_id(一对一的FK到some_main_entity.id)
  • 名称

现在,我希望更改SubEntity,以便该名称对于SomeMainEntity中给定的GroupEntity是唯一的。我尝试了以下方法:

SubEntity

  • id(自动递增整数PK)
  • some_main_entity_id(一对一FK到some_main_entity.id,FK到some_main_entity.group_entity_id)
  • 名称

但是这显然不起作用,因为some_main_entity id / group_entity_id显然必须是复合PK。另外,由于SomeMainEntity扩展了MainEntity,因此即使不是不可能的情况,也会有些棘手。我也尝试过在SomeMainEntity中创建唯一键,但是Doctrine似乎不支持(https://stackoverflow.com/a/24364419/1032531

作为另一尝试,我将GroupEntity添加为SubEntity中的属性

SubEntity

  • id(自动递增整数PK)
  • some_main_entity_id(一对一的FK到some_main_entity.id)
  • group_entity_id(到group_entity.id的一对多FK)
  • 名称

现在,我可以在name和group_entity_id之间添加唯一的约束,但这确实不对,因为它不能确保给定的关联MainEntity也包含相同的GroupEntity。

如何完成?

symfony doctrine-orm doctrine
1个回答
0
投票

最终采用了更传统的SQL方法,该方法易于使用Doctrine实施。

前三个表保持不变:

MainEntity

  • id(自动递增整数PK)

SomeMainEntity扩展MainEntity

  • id(association = true =>与main_entity.id一对一的PK / FK)
  • group_entity_id(到group_entity.id的一对多FK)

GroupEntity

  • id(自动递增整数PK)

然后添加了一个额外的表:

MainEntityHasGroupEntity

  • mainEntityId(向MainEntity.id的复合PK和FK。添加UNIQUE索引)
  • groupEntityId(与GroupEntity.id的复合PK和FK)

然后在最后一张桌子上使用了该多余的桌子:

SubEntity

  • id(自动递增整数PK)
  • mainEntityId(从FK到MainEntityHasGroupEntity.mainEntityId)
  • groupEntityId(从FK到MainEntityHasGroupEntity.groupEntityId)
  • 名称
© www.soinside.com 2019 - 2024. All rights reserved.