EF建模帮助:公司具有多个角色和位置的用户(模型优先)

时间:2013-07-17 13:29:38

标签: database-design entity-framework-5 class-design

我很容易陷入简单的建模/设计过程中。你会如何设计以下型号?我正在使用Entity Framework 5 / Model First。

  • 我有公司用户。
  • 每个用户可以有多个角色 在一家公司。
  • 每个用户都可以在多个地点工作 公司。
  • 用户可以在多家公司工作,因此必须选择他所代表的公司名称(这很重要)。

我现在正在设计奇怪的三元类,例如“UserLocationCompany”,它与每个实体都有1-n关系(在DB中设计表时你会做什么),以及像“User.CurrentCompany”这样的属性最终有公司实体的死胡同。这种问题的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

你比我更了解这是否适合你的情况,但是你能否将位置作为角色的属性?因此,角色将链接到位置或者一个角色可以有许多位置。

无论哪种方式,通过使用现有连接添加更多数据,这将阻止您重复链接公司和用户的工作。

希望这对你有用:)

答案 1 :(得分:0)

'你将如何设计以下模型' - 从提供的信息来看,这是我的思考过程。

    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