首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则多级继承映射

问原则多级继承映射
EN

Stack Overflow用户
提问于 2012-09-27 09:25:10
回答 1查看 761关注 0票数 4

我有四种类型的产品,我想映射到MySQL关系数据库管理系统上的一个原则ORM结构。产品为PrepaidProduct、PostpaidProduct、MobilePrepaidProduct、MobilePostpaidProduct,结构如下:

代码语言:javascript
复制
abstract class Product {
    /**
     * @ORM\Column(type="integer")
     */
    private $price;

    ...
}

class PrepaidProduct extends Product {
    /**
     * @ORM\Column(type="integer")
     */
    private $credit;

    /**
     * @ORM\OneToMany(targetEntity="PrepaidDiscount")
     */
    private $prepaidDiscounts;
}

class PostpaidProduct extends Product {
    /**
     * @ORM\OneToMany(targetEntity="BundleMapping")
     */
    private $bundleMappings;
}

class MobilePrepaidProduct extends PrepaidProduct {
    /**
     * @ORM\ManyToOne(targetEntity="Device")
     */
    private $device;
}

class MobilePostpaidProduct extends PostpaidProduct {
    /**
     * @ORM\ManyToOne(targetEntity="Device")
     */
    private $device;
}

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

在我看来,应该有两个单独的表,一个用于PostpaidProduct,一个用于PrepaidProduct,并且在MobilePostpaidProduct/PostpaidProduct和MobilePrepaidProduct/PrepaidProduct的表上有一个表继承。

你们觉得怎么样?有什么最好的方法来模拟这个吗?

EN

回答 1

Stack Overflow用户

发布于 2012-09-27 11:16:07

如果您使用的是关系数据库管理系统层MySQL,我认为您的建议是最好的选择。

如果子类有*很少的属性,最重要的可能是关系,那么实际上是在促进组合,并且数据表示不会很稀疏--也就是说,主表中不会有很多空字段。

另一方面,如果您只想坚持只使用组合,那么在大多数情况下,$device是唯一的附加关系吗?如果是这样,您可以在存储库类中编写一个findAllMobileProducts方法,该方法将返回设备不为空的每个产品,依此类推。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12618161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档