我有四种类型的产品,我想将它们映射到 MySQL RDBMS 上的 Doctrine ORM 结构。产品是PrepaidProduct
, PostpaidProduct
, MobilePrepaidProduct
,MobilePostpaidProduct
结构如下:
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
来创建相应的捆绑映射的结构,所以我认为我需要这个作为映射的超类。
在我看来,要走的路是有两个单独的表,一个 forPostpaidProduct
和一个 for PrepaidProduct
,并在那些 for MobilePostpaidProduct
/PostpaidProduct
和MobilePrepaidProduct
/上有一个单表继承PrepaidProduct
。
你们有什么感想?关于最好的建模方法有什么想法吗?