学说多级继承映射



我有四种类型的产品,我想将它们映射到MySQL RDBMS上的Doctrine ORM结构。产品有PrepaidProductPostpaidProductMobilePrepaidProductMobilePostpaidProduct,结构如下:

abstract class Product {
    /**
     * @ORMColumn(type="integer")
     */
    private $price;
    ...
}
class PrepaidProduct extends Product {
    /**
     * @ORMColumn(type="integer")
     */
    private $credit;
    /**
     * @ORMOneToMany(targetEntity="PrepaidDiscount")
     */
    private $prepaidDiscounts;
}
class PostpaidProduct extends Product {
    /**
     * @ORMOneToMany(targetEntity="BundleMapping")
     */
    private $bundleMappings;
}
class MobilePrepaidProduct extends PrepaidProduct {
    /**
     * @ORMManyToOne(targetEntity="Device")
     */
    private $device;
}
class MobilePostpaidProduct extends PostpaidProduct {
    /**
     * @ORMManyToOne(targetEntity="Device")
     */
    private $device;
}

主要思想是我想使用一个服务(工厂),它将使用 PostpaidProduct 类的基本类结构来创建相应捆绑映射的结构,所以我认为我需要它作为映射的超类。

在我看来,要走的方法是有两个单独的表,一个用于PostpaidProduct,一个用于PrepaidProduct,并在MobilePostpaidProduct/PostpaidProductMobilePrepaidProduct/PrepaidProduct上具有单个表继承。

你们怎么看?关于建模的最佳方式的任何想法?

如果你像我一样使用RDBMS层[MySQL,Postgre],在我看来,你的建议是最好的选择。

如果子类*更多的属性,可能是关系,你实际上是在促进组合,你的数据表示不会是稀疏的[即主表中不会有很多空字段]。

另一方面,如果您只想坚持作文[在大多数情况下更可取]-$device是移动类中唯一的附加关系吗?如果是这样,您可以在存储库类中编写一个 findAllMobileProducts 方法,该方法将返回设备不为 null 的每个产品,依此类推。

相关内容

  • 没有找到相关文章

最新更新