0

我有点陷入了一个简单的建模/设计过程。您将如何设计以下模型?我正在使用 Entity Framework 5 / Model First。

  • 我有在公司工作的用户。
  • 每个用户可以在公司中拥有多个角色。
  • 每个用户可以在公司的多个地点工作。
  • 一个用户可以在多个公司工作,因此必须选择他以哪个公司的名义行事(这很重要)。

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

4

2 回答 2

0

您比我更清楚这是否适合您的情况,但是您能否将 Location 设为 Role 的属性?所以一个角色可以链接到一个位置,或者一个角色可以有多个位置。

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

希望对你有用:)

于 2013-07-17T13:42:17.253 回答
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
于 2013-07-18T15:40:49.240 回答