Doctrine orm Doctrine2中关系实体(也是关系的实体)上的复合主键或代理主键
我有一个大型数据库,其中有关系实体。这正是因为在《条令2》手册中:我需要在我们的关系中存储额外的属性,因此关系成为一个实体 通常我们对实体使用生成的ID,对关系使用复合键。在这种情况下,实体是一种关系,这使得选择更加复杂… 请注意,我这里不是在说自然键。我使用的是一个复合键,它由id组成,id是在各自拥有的实体中使用自动递增策略创建的整数 我看到在关系实体上使用复合主键的一些缺点:Doctrine orm Doctrine2中关系实体(也是关系的实体)上的复合主键或代理主键,doctrine-orm,foreign-keys,relationship,composite-primary-key,surrogate-key,Doctrine Orm,Foreign Keys,Relationship,Composite Primary Key,Surrogate Key,我有一个大型数据库,其中有关系实体。这正是因为在《条令2》手册中:我需要在我们的关系中存储额外的属性,因此关系成为一个实体 通常我们对实体使用生成的ID,对关系使用复合键。在这种情况下,实体是一种关系,这使得选择更加复杂… 请注意,我这里不是在说自然键。我使用的是一个复合键,它由id组成,id是在各自拥有的实体中使用自动递增策略创建的整数 我看到在关系实体上使用复合主键的一些缺点: 我需要在创建实体及其关系之间调用persisten-in(在我可以将实体上的键用作复合主键中的外键之前生成该键)
- 我需要在创建实体及其关系之间调用persisten-in(在我可以将实体上的键用作复合主键中的外键之前生成该键)
- 要将其他实体与关系实体关联起来,我们需要在这些实体中再次为复合键中使用的ID添加列。如果我要使用代理主键,我只需要一列保存该id
- 它们消除了对某些联接查询的需要,相反,您可以构建查询来使用组合键直接提取信息
- 当用户和某个实体之间的关系被删除并随后再次创建时(在我们的应用程序模型中可能会发生这种情况),我们也需要恢复对所有其他相关实体的访问。 如果用户和SomeEntity之间的关系是使用代理主键上的自动增量策略创建的。恢复的(新)关系将获得新的主键(id)。因此,相关实体(使用“旧”键存储)不再可访问。 如果我在关系上使用复合键,我可以简单地恢复关系(它得到相同的复合键值),这样我就可以立即再次访问其他相关实体李>
对于感兴趣的人来说,这里还讨论了堆栈溢出上的代理键与复合键:我建议将您的两个外键设置为复合主键 您的关联实体将由其两个关系的ID标识 理论上,Doctrine的UnitOfWork/CommitterDerCalculator应该能够以正确的顺序插入元素,因此,您不必处理持久化顺序 您的映射在结尾处如下所示(注释示例):
我建议将您的两个外键设置为复合主键
您的关联实体将由其两个关系的ID标识
理论上,Doctrine的UnitOfWork/CommitterDerCalculator应该能够以正确的顺序插入元素,因此,您不必处理持久化顺序
您的映射在结尾处如下所示(注释示例):