这里的一般问题(更具体地说是Django / Python),当创建一个模型,例如Company
,并且几个用户(员工)将与这样的模型相关时,不同的模型应该如何相关吗?
即。用户配置文件将通过OneToOneField与用户对象相关联。但是,如果Company对象通过ForeignKey与User对象或UserProfile对象相关联,为什么这是适当的方式?
所以
class UserProfile(models.Model): # For the Company Employees
user = models.OneToOneField(UserModel, related_name='employeeprofilemodel', on_delete=models.CASCADE, blank=True,
null=True)
...
company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True)
或
class User(AbstractBaseUser): # For all Users
...
company_rel = models.ForeignKey(CompanyModel, related_name='companyrel', null=True)
答案 0 :(得分:2)
这更多是基于意见的问题,而不是技术性问题。我推荐以前的方式,即与AUTH_USER_MODEL
创建一对一的关系。然后,您可以将员工相关数据存储在User Profile表中,该表可以通过ForeignKey关系与Company表相关联。这种数据库模式的优点是,您可以在将来更改User表(即AUTH_USER_MODEL
)(当然,如果需要),而不会影响可能敏感的员工详细信息。 User表独立于数据库中的Company表,可用于授权。在数据库查询期间也会携带更少的数据,并且可以隐式地实现一小部分优化。我认为这比从auth.User
模型扩展更合适。
无论何时需要数据库重构,后一种方式都可能危及上述敏感数据。此外,当用户模型拥有的数据多于用户所需的数据时,查询会更加繁重。使用用户表处理数据库查询时,可能需要特别注意优化。