我正在Symfony2中使用FOSUserBundle进行开发,我对DDBB设计不太确定。我会尽量简单地解释我的情况。让我们说,我的项目就像facebook。所以你知道,实体"用户"将是整个应用程序中最重要和最相关的,一切都与之相关
重点是,我不确定如何使用FOSUserBundle处理DB层(表、条令实体和关系)。默认情况下,实体User必须具有所有FOSUserBundle字段(用户名、电子邮件、令牌、电子邮件_canonical等…)。所以我怀疑我是否应该创建另一个实体来处理与其他实体的关系,比如"UserReal"。它将与第一个实体"用户"具有OneToOne关系,该实体将仅用于登录或访问目的。或者只创建一个对象"用户"并用它处理所有事情
我的选择:
1。-有一个实体"UserSecurity",它扩展了FosUserBundle用户实体,并且仅限于在访问(登录、注销、注册)情况下使用。-有一个实体"UserReal",或者只是"User",它拥有来自用户的所有字段属性(名称、姓氏、位置)。它与其他实体(如页面、群组、照片)有关系。它是"主要"实体,具有生成价值的策略。-UserSecurity通过UserSecurity->id_User与User之间存在OneToOne关系。-注册必须同时插入两个实体。
-
的另一种方式
- 与第1点类似,但主要实体是"UserSecurity",因此id和生成值的策略也将在其中
- 用户实体将具有字段id_User,该字段具有OneToOne到UserSecurity的关系
-
使用一个对象
- 在一个实体中扩展FOSUserBundle,并设置其所有关系
- 我不喜欢这样,因为我需要一个没有安全选项的干净对象User
我认为facebook有很多用户实体实例(例如,每个朋友一个),但只有一个用户登录实例,所以如果我们把它用于所有事情,那将是错误的。
我想知道其他意见/建议。
我希望它没有被弄糊涂(或者我没有弄糊涂)。
非常感谢。
只需扩展FOS用户类,就不需要与双胞胎实体建立OneToOne
关系。
拆分更多的实体会导致水合和持久性方面的开销,但还会导致不必要的分离逻辑:您正在定义用户属性[用户名、密码、名字、姓氏等],它们都属于同一个实体。
如果你需要不同类型的用户,你应该考虑用其他实体组成子类,但这超出了你的问题范围。