我目前正在使用Django 1.5.1并使用官方文档中描述的自定义用户。我意识到所有内容都存储在一个表auth_user
之下。
我的问题是,为什么最好将所有内容放在一个大表中,而不是通过使用user_profile
表来获取所有其他数据,而不是像以前那样拥有2个表?它似乎比以前更聪明,如果我们想要添加20个新字段以获取有关用户的信息,在auth_user
中包含所有内容是很奇怪的。
在我的情况下,现在我class MyUser(AbstractUser)
有2个额外的字段gender
和date_of_birth
,所以这一切都很好,但现在我想提供许多其他信息(文本字段)像“最喜欢的电影”,“最喜欢的书籍”,“爱好”,“我不能没有的5件事”等等,以获得更多关于我的用户的信息。所以我只是想知道我是否应该把它放在MyUser
课程下面,还是应该定义一个UserProfile
?为什么?
谢谢!
答案 0 :(得分:2)
如果在一个表中拥有它,那么数据库访问速度会更快。使用旧方法,您必须在辅助表上join
以获取用户的所有信息。
通常当您看到One-to-One
关系时,最好将它们合并到一个表中。
但新的自定义User
模型还解决了另一个问题,即用户应具有的属性?哪些属性对您的应用至关重要?需要电子邮件吗?电子邮件是否也应该是用户登录的用户名?
在引入此功能之前,您无法执行这些操作。
关于您在何处放置其他用户信息(例如“爱好”等)的问题,这实际上取决于您查询/需要此属性的频率。它们只会出现在用户的个人资料页面上吗?那么你可以将它们放在一个单独的表中,并且不会出现太多问题或性能损失。否则,更喜欢将它们存储在与User
相同的表格中。