抽象实体的数据库设计



我有一个称为 Campaign的抽象实体,以及许多最终实体,例如 FooCampaignBarCampaign等。这套是开放式的。所有最终实体都具有抽象实体中描述的公共字段。不过,常见字段可能会随着时间的推移而变化,但是我可能想添加更多共享字段或删除其中一些字段。与最终实体的字段相同。我想知道这是一个数据库设计,这些是我正在考虑的选择:

  1. 关系数据库,一个用于公共字段的表和每个最终实体的表,它们之间的一对一关系。
  2. 关系数据库,只有一个表,最终实体的任何唯一字段都保存在JSON列中。
  3. NOSQL数据库。

我的应用程序写在PHP(Symfony 4(中,因此我渴望使用学说。我倾向于在潜意识中使用选项2,但实际上并不了解这些选项中的任何一个。我需要能够根据唯一字段查询广告系列,速度也很重要。

哪种选择更适合我的情况,还有其他选择吗?

update

学说继承映射(在第一个评论中提到(似乎完全符合我的案子。但是,当有NOSQL数据库(如Mongo(的示意性数据(虽然我的数据并不完全是示意性(时,为什么还要打扰这一点呢?因此,问题是带有继承映射与nosql的rdbms。

当广告系列进入图片时,我假设或预测会有很多要求运行不同查询的数据,以返回您拥有的数据的分析。为此,您需要更高的灵活性和能够访问每个小记录的广告系列,您可以在其中运行分析查询。如果您将不同的字段序列化在单个JSON列中,则拥有JSON数据将非常限制您。

如果您想选择MySQL:

我的建议

因此,如您提到的所有命令字段,您都有活动表。对于动态字段,您可以拥有以下第二个表:

id  campaign_id field_name  field_value
1   1   area    somearea
2   1   budget  100
3   2   area    anotherarea
4   2   owner   someowner
5   2   is_prime    TRUE

因此,Apaime_id将是广告系列,field_name和field_value的外键,是更改的动态字段。这将使您灵活地为您的广告系列实体添加任意数量的Dynamica字段,从而消除了管理数据的担忧。

我个人会喜欢像Mongo这样的Nosql,只是因为我不必担心牢固的关系。我可以拥有尽可能多的灵活性来获得广告系列数据。更不用说,Mongo具有出色的聚合功能(MySQL也有:)(,因此没有任何限制。最终将是个人喜好。

相关内容

  • 没有找到相关文章

最新更新