用户的个人资料应该是一个单独的模型吗?

Yer*_*gin 8 database-design ruby-on-rails

我正在通过构建一个简单的站点来学习Rails,用户可以在其中创建文章并对这些文章发表评论.我有一个列出用户最新文章和评论的视图.现在,我想添加用户"个人资料",用户可以在其中输入位置,年龄和简短传记等信息.我想知道这个配置文件是否应该是一个单独的模型/资源(我的用户模型中已经有很多字段,因为我使用的是Authlogic及其大部分可选字段).

使用单独资源的优缺点是什么?

Mac*_*cha 5

  • 优点:它简化了每个模型
  • 缺点:同时管理 2 个稍微困难一些

这基本上取决于用户和个人资料的大小。如果用户是 5 个字段,而配置文件是 3 个,则没有意义。但如果用户有 12 个字段,个人资料有 20 个,那么您绝对应该这样做。


Ben*_*Cox 5

我认为最好放入一个单独的模型。考虑模型如何与数据库表相对应,然后如何针对应用程序支持的各种用例读取这些模型。

如果用户只是偶尔查看他的实际个人资料,但用户模型被频繁访问,那么您绝对应该将其设为具有一对一关系的单独对象。如果每次需要用户数据时都需要配置文件数据,您可能希望将它们放在同一个表中。

也许每次显示用户时都需要位置(比如他们留下的评论),但传记应该是不同的模型?您必须找出正确的细分,但一般规则是构建事物,这样您就不必立即提取未使用的数据。


Mar*_*cus 5

为了清晰和简单,我建议在 User 模型中保留配置文件列。如果您发现您只使用某些字段,请仅使用 :select 选择您需要的列。

如果您后来发现由于某种原因需要一个单独的表(例如,一个用户可以有多个配置文件),那么将它们分开应该不会有太多工作。

我犯了有两张桌子的错误,除了增加了额外的复杂性之外,它并没有给我带来任何好处。


nic*_*ckf 3

我会把它分开。并非所有用户都想要填写个人资料,因此这些将是用户表中的空字段。这还意味着您可以更改配置文件字段,而无需更改用户模型的任何逻辑。