我有点陷入了一个简单的建模/设计过程中。你将如何设计下面的模型?我正在使用实体框架5/Model First。
- 我有在公司工作的用户
- 每个用户可以有多个角色在公司中
- 每个用户可以在多个位置工作公司
- 用户可以在多家公司工作,因此必须选择以哪家公司的名义行事(这一点很重要)
我现在正在设计看起来很奇怪的三元类,比如"UserLocationCompany",它与每个实体都有1-n关系(在DB中设计表时会这样做),以及像"User.CurrentCompany"这样的属性,它最终在Company实体上有一个死胡同。解决这样一个问题的正确方法是什么?
你比我更清楚这是否适合你的情况,但你能让Location成为Role的一个属性吗?因此,一个角色可以链接到一个位置,或者一个角色可能有多个位置。
无论哪种方式,都可以通过使用现有连接添加更多数据来停止重复链接公司和用户的工作。
希望这对你有用:)
"您将如何设计以下模型"-根据提供的信息,这是我的思考过程。
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表,并将它们合并到一个UserCompanyrolLocation表中。这样做有好处也有坏处;这会导致每个角色的位置行重复,反之亦然,但这会使联接和查询更容易一些。
User --< UserCompanyRoleLocation >-- CompanyRole
User --< UserCompanyRoleLocation >-- CompanyLocation
"UserCompanyRoleLocation"
PK UserCompanyRoleLocation
FK User
FK CompanyRole
FK CompanyLocation
Primary