Database design 使用条令处理用户设置

Database design 使用条令处理用户设置,database-design,symfony,doctrine-orm,schema,Database Design,Symfony,Doctrine Orm,Schema,我正在用Symfony2构建一个应用程序,并使用条令作为我的ORM 我的用户将需要存储大量特定于他们的配置/设置(将“您是否希望接收我们的电子邮件?”作为存储设置的典型示例) 对我来说,什么是构建这个的最佳方式 我应该为每个设置向用户实体添加属性吗 protected $receiveEmails; 或者我应该创建一个“userSetting”实体,该实体与我的用户对象具有多个关系,并使userSetting实体具有两个其他属性: protected $setting; protected $

我正在用Symfony2构建一个应用程序,并使用条令作为我的ORM

我的用户将需要存储大量特定于他们的配置/设置(将“您是否希望接收我们的电子邮件?”作为存储设置的典型示例)

对我来说,什么是构建这个的最佳方式

我应该为每个设置向用户实体添加属性吗

protected $receiveEmails;
或者我应该创建一个“userSetting”实体,该实体与我的用户对象具有多个关系,并使userSetting实体具有两个其他属性:

protected $setting;
protected $value;
?

我提问的主要原因是绩效。我希望在用户对象上有一个属性,这样某些设置可以是布尔类型,其他设置可以是字符串等,但我不想让我的站点在每次获取当前用户实体时都从数据库中获取这些值(几乎每个页面,因为我的身份验证都会在我的数据库中回退用户实体)

答案是什么?我是否需要返回并重新编写任何使用以下内容的实例:

....getRepository('AcmeMainBundle:User')->find($id)
使用自定义存储库功能,只选择这种情况下所需的元素

还是我过度优化了?

有两种方法

1) 按照您所说的,用
manytomy
关系创建一个单独的实体

2) 使用
OneToOne
关系创建一个单独的实体,其中实体的每个属性都是一个设置名称

我会选择第二种选择,因为我表现出色。一行多列比一列多行好。而且它更易于处理和实现。

有两种方法

1) 按照您所说的,用
manytomy
关系创建一个单独的实体

2) 使用
OneToOne
关系创建一个单独的实体,其中实体的每个属性都是一个设置名称


我会选择第二种选择,因为我表现出色。一行多列比一列多行好。而且更易于处理和实施。

第二个选项很有意义。我假设这样做正确吗?除非我在我的用户对象上显式调用getMySetting getter方法,否则不会加载我的任何“设置”实体?@anonymous,如果您使oneToOne急切加载设置,则将始终加载。第二个选项是有意义的。我这样假设是否正确?除非我在我的用户对象上显式调用getMySetting getter方法,否则我的“设置”实体都不会加载?@anonymous,如果您使用oneToOne,加载设置将始终加载。