“您将如何设计以下模型” - 根据提供的信息,这是我的思考过程。
Company --< CompanyLocation >-- Location
"CompanyLocation"
PK CompanyLocationId
FK CompanyId
FK LocationId
我猜测不止一家公司可以共享一个位置,所以这个关系表使这成为可能。
User --< UserCompanyLocation >-- CompanyLocation
"UserCompanyLocation"
PK UserCompanyLocationId
FK UserId
FK CompanyLocationId
Primary
此表将用户与该位置的公司相关联 - 并允许用户设置它是否是他的主要位置。
Company --< CompanyRole >-- Role
"CompanyRole"
PK CompanyRoleId
FK CompanyId
FK RoleId
此表显示了哪些公司包含哪些角色。
User --< UserCompanyRole >-- CompanyRole
"UserCompanyRole"
PK UserCompanyRoleId
FK UserId
FK CompanyRoleId
现在可以将用户分配到公司中的特定角色。如果您希望用户能够分配主要角色,您还可以添加“主要”列。
这有帮助吗?
编辑:
另一种选择是删除 UserCompanyRole 和 UserCompanyLocation 表并将它们合并到一个 UserCompanyRoleLocation 表中。这样做有好处也有坏处。它会导致每个角色的位置行重复,反之亦然 - 但它会使连接和查询更容易一些。
User --< UserCompanyRoleLocation >-- CompanyRole
User --< UserCompanyRoleLocation >-- CompanyLocation
"UserCompanyRoleLocation"
PK UserCompanyRoleLocation
FK User
FK CompanyRole
FK CompanyLocation
Primary