FOSUserBundle:对DB设计的怀疑

时间:2012-09-27 19:05:54

标签: symfony doctrine-orm fosuserbundle

我正在使用FOSUserBundle在Symfony2中开发,我对DDBB Design不太确定。我将尽可能简单地解释我的情况。 我们说我的项目就像facebook。所以你知道实体“用户”在整个应用程序中是最重要和最相关的,并且一切都与它有关。

关键是我不确定如何处理使用FOSUserBundle的DB层(表,学说实体和关系)。默认情况下,实体用户必须拥有所有FOSUserBundle字段(用户名,电子邮件,令牌,email_canonical等等)。 所以我怀疑是否应该创建另一个实体来处理与其他实体的关系,比如“UserReal”。它将OneToOne与第一个实体“User”关联起来,将仅用于登录或访问目的。或者只创建一个对象“User”并使用它处理所有内容。

我的选择:

1。 - 实体“UserSecurity”扩展了FosUserBundle用户实体,并且仅限于在访问(登录,注销,注册)情况下使用。 - 有实体“UserReal”,或者只是“用户”巫婆的每个字段都来自用户(姓名,姓名,位置)。它与其他实体(如页面,组,照片)有关系。它是“主要”实体,具有生成价值的策略。 - UserSecurity通过UserSecurity-> id_user与用户建立关系OneToOne。 - 注册必须插入两个实体。

  1. 反过来说

    • 与第1点类似,但主要实体是“UserSecurity”,因此id也将在那里以及生成值的策略。
    • 用户实体,将具有与UserSecurity关系OneToOne的字段id_user。
  2. 使用一个对象

    • 在一个实体中扩展FOSUserBundle并将所有关系设置为它。
    • 我不喜欢这个因为我需要一个干净的对象没有安全选项的用户。
  3. 我认为facebook有很多User实体实例(例如每个朋友一个实例),但只有一个用户登录的实例,所以如果我们将它用于所有内容则会出错。

    我想知道其他意见/建议。

    我希望它不会混淆(或者我没有混淆)。

    非常感谢提前。

1 个答案:

答案 0 :(得分:1)

只需扩展FOS用户类,就无需与双胞胎实体建立OneToOne关系。

在更多实体中分裂会导致水合作用和持久性的开销,但此外还会导致不需要的分离逻辑:您正在定义用户属性[用户名,密码,名字,姓氏等],它们都属于同一实体。

如果您需要不同类型的用户,您应该考虑与其他实体组成子类,但这超出了您的问题的范围。