Django数据库设计最佳实践:辅助字段关联User模型还是Employee模型?
结论
优先把Roles以及同类业务属性模型关联到Employee模型,这是适配你当前架构的最优选择。
核心原因
- 两个模型的职责边界完全不同:Django默认
User模型的核心作用是全局身份认证,只负责存储登录凭证、全局权限这类和业务场景无关的信息;而Employee模型本身就是用户在特定公司的业务身份载体,存储了所属公司、入职日期这类和任职强绑定的属性,角色本身就是用户任职期间的业务属性,关联Employee完全符合领域设计的职责划分原则。 - 完美适配跨公司流动场景:如果后续出现用户同时在多家公司任职、或者离职后入职同主体其他公司的需求,你只需要给同一个
User新增/调整对应的Employee实例即可,Roles及其他业务数据会自动跟着任职关系走,既不会出现前公司权限残留的问题,也不需要批量修改User关联的所有业务数据,后期做数据隔离、权限审计的逻辑也会简单很多。 - 你提到的“所有内容关联核心基础表”是对最佳实践的误读:这个原则的前提是核心基础表的属性和你要关联的数据匹配,如果把公司内的业务属性绑定到全局
User,反而会严重破坏模型的解耦性,后续要支持单用户多任职身份时,所有关联User的业务模型都要重构,改动成本极高。
特殊场景补充
如果存在平台级的全局角色(比如全站管理员、平台审核员这类和具体公司任职无关的角色),可以单独拆分GlobalRole模型关联到User,和公司内的Roles模型分开维护即可,两者互不干扰。
内容的提问来源于stack exchange,提问作者Luke Leach
相关产品推荐
相关产品推荐

