用于复杂任务的实体关联映射,ORM和数据建模方法

时间:2015-01-24 23:34:16

标签: symfony orm doctrine-orm associations data-modeling

我正在研究一个工作室项目,试图学习使用Symfony2,Doctrine 2.4.7作为ORM和MySql 5.5作为DB的不同方法。我故意将我的问题最小化,以便更好地理解和阅读,如果你需要更多的细节,你只需要问我,如果我的英语不太好就道歉。

为了避免由于我的问题的标题进行大量讨论,让我综合显示一个简单而常见的问题(但对我来说很复杂,因为我是一个新的学说)。

模特

  • 存储用户数据的User实体(映射

  • Category实体(映射),用于存储与具有ManyToMany BD的用户关联的某些类别。

  • 每个用户都可以选择一个或多个类别。

问题

  • 用户类别接近100。
  • 许多类别可能具有特定的关联形式。
  • 每个表单由常用字段和/或仅特定字段组成(每个类别1到10个字段)。

目标

  • 了解这个用例最平衡的方法(在灵活性和性能方面),用于创建存储用户填充数据所需的实体和关联(部分这些数据我希望它们是可搜索的)。

一些相关参考资料

可能的解决方案

  • 在相关字段块内为每个类别手动创建表单类型(我将此表单用作DIC中的服务,并使用块来表示我需要在多个类别上重用的字段
  • 创建一个CategoryForm实体,该实体具有检索与该类别相关的表单名称所需的属性(在构建表单时对表单工厂有用),具有关联ManyToMany UD使用类别并存储序列化的LOB(来自表单并与用户相关的数据)。

有一种更好的方法可以避免LOB中对象的序列化吗? (也许我错了,但序列化的数据在mysql中无法搜索/索引

欢迎任何其他解决方案或对可读资源的引用!

1 个答案:

答案 0 :(得分:1)

好吧,我会尝试用一个简单的猜测来回答这个问题:这个类别是在几个用户之间共享的东西(因为你有多个用户)。

因此,如果您希望用户的表单能够设置(添加/删除或更新)与用户相关的类别,那么您应该只选择与该类别相关的实体小部件。

我为什么这么说?

由于您的类别链接到多个用户,因此您希望在类别和用户之间处理关系的方式将导致用户表单中现有类别的任何更新传播到其他用户。 这意味着应该通过单个表单创建/更新类别(以您的需求为模)。然后,您可以从用户表单中将类别链接到用户。

就类别的形式数量而言,有几个要处理的参数:

  • 是否所有类别都以相同的方式验证(知道您是否只需要隐藏小部件以使验证工作)?
  • 您是否有大量不同类别的类别?
  • 如果是,对于给定类型,总是以相同的方式组成?

如果我的初步猜测错了,请提供更多详细信息;)