1

我有三个“可寻址”实体(可以有一个地址):

交货点
客户
配送中心

每个可寻址实体也是可地理定位的(具有纬度和经度),但我有可地理定位但不可寻址的实体,例如 轨迹点路线点(经纬度的有序序列)。

使用学说 2(使用 Symfony2 和 YAML 映射)实现这一目标的最佳方法是什么(请考虑性能,因为某些表可能有数百万行)?

我的问题是:解决这个问题的最佳方法是什么?映射超类?单表继承?多表继承?通过阅读教义的文档,我没有得到哪一个最适合这个。

如果这很重要,我正在使用 PostgreSQL。

4

2 回答 2

3

这绝对是组合比继承更适合的情况。

你用来描述问题的语言是有启发性的。您将“可寻址”定义为“可以拥有和地址,这与“客户是一种地址”不同在后一种情况下,继承会更有意义。

零级只是使用关联(Address OneToOne Geolocation、Customer OneToOne Address、RoutePoint OneToOne Geolocation)等)。

如果您想对任何具有地址的东西执行一组操作,请创建一个名为 Addressable 的接口,并让您的客户实现它。

如果您正在运行 PHP 5.4,则可以使用特征来干涸实现这些接口。

于 2013-07-19T21:11:32.407 回答
1

最快的选择是根本不使用任何表继承并将所有实体映射到不同的表,但是如果您出于某种原因想要使用表继承......

单表继承在架构上更快,因为查询中的连接更少......请参阅本文以了解表继承的工作方式/外观......

元数据通常会被缓存,因此在使用映射超类或为每个实体提供完整映射(这在 DRY 方面会很糟糕)之间不会有明显的性能影响。

真正的性能提升将来自优化您的查询并缓存这些查询及其结果。

于 2013-07-18T17:06:34.133 回答