【问题标题】:ER diagram - Project, Task and EmployeeER 图 - 项目、任务和员工
【发布时间】:2012-07-24 06:19:33
【问题描述】:

更新: 公司可以有多个项目,公司也可以有员工。一个员工只能拥有一个公司,一个项目也只能拥有一个公司。 一个项目有几个任务。 在这些任务中,员工只会被分配到其中的一些任务。

员工只能被分配到他/她被分配到的项目的任务。

请查看以下内容并帮助我了解如何创建数据库设计和最终实体模型 基于两个 cmets 的更新图: 如果此 ER 图看起来不错,请您提供有关如何创建 EF 4.1 实体类的指导,尤其是对于 EmployeeProjectTasks 表。 我是 EF 4.1 Code First 的新手,想了解创建这些类的方向

如果此 ER 图看起来不正确,请建议修改。

【问题讨论】:

  • 对你来说,一个任务可以存在而不被分配到一个项目吗?
  • @catcall 不,任务始终与项目相关联。实际上,EmployeeProjectTasks 是否应该有 4 列(UserID、EmployeeProjects 中的 ProjectID 和 TaskID、Tasks 表中的 ProjectID)?
  • 它不需要重复的列。它需要多个重叠的外键约束:foreign key (UserID, ProjectID) references EmployeeProjects (UserID, ProjectID)foreign key (TaskID, ProjectID) references Tasks (TaskID, ProjectID)
  • @Catcall - 请查看更新后的图表。我想我现在有了。感谢你的帮助。我应该如何创建 Code First 类?
  • 这应该是一个不同的问题。或者试试谷歌。我发现了这个:Generating EF Code First Model Classes from an Existing Database.

标签: entity-framework database-design


【解决方案1】:

员工只能被分配到他/她被分配到的项目的任务。

您的 ER 模型不强制执行此操作。

这是因为ProjectTask 之间的非标识关系,所以ProjectID 的传播在菱形依赖的那个分支中被截断,EmployeeProjectTask.ProjectID 只引用EmployeeProject (但不是Task)。


确保EmployeeProjectTaskEmployeeProjectTask 来自相同 Project 的模型如下所示:

注意Task 如何具有复合PK {ProjectID, TaskNo},以及Project.ProjectID 如何沿两个“分支”传播,并在“菱形”底部合并(导致EmployeeProjectTask.ProjectID,与 EmployeeProjectTask 的 FK。

【讨论】:

  • 能否请您再次发布图片。我看不到它。感谢您的帮助。
  • @PratikKothari 对我来说看起来不错。这可能是 StackOverflow.com 本身的一个临时问题。你现在能看到吗?
  • 布兰科,谢谢。我现在可以看到图像并理解。只是在想,如果还有一个实体——公司会怎样。公司可以有多个项目,公司也可以有员工。一个员工只能拥有一个公司,一个项目也只能拥有一个公司。然后我是否以相同的方式将 CompanyID 从 Project 和 Employee 传播到 EmployeeProjects 表?另外,CompanyID 会传播到 EmployeeProjectTask 吗?
  • 更新了我的图表以反映您的评论。我应该如何围绕这种设计创建 EF 4.1 代码优先类?
【解决方案2】:
  • 目前您不知道哪个员工被分配到哪个项目
  • 关系看起来像员工/任务是 m:n 关系,我认为你不是故意这样做的
  • employeetasks 是继承自 task 还是关系实体?

【讨论】:

  • 您好ExpectoPatronum,EmployeeTasks 是关系实体,是Tasks 和Employees 之间的映射表。每个任务都与一个项目相关联,因此根据 EmployeeTasks 中定义的映射,我应该能够知道为该员工映射的项目,对吗?我可以做的另一件事是在 Tasks 表中的 TaskID 和 ProjectID 列上定义唯一约束,并将 ProjectID 列添加到 EmployeeTasks....这将允许我快速查询员工任务或员工项目....
  • @PratikKothari:您说过,“每个任务都与一个项目相关联,因此根据 EmployeeTasks 中定义的映射,我应该能够知道为该员工映射的项目,对吗?”那是个错误的问题。正确的问题是,“我可以存储员工 12 被分配到项目 106 的事实,即使尚未分配给该员工的任务?”答案是,“不,你不能。”但这是一个要求;您需要一个表格来实现该要求。
  • @Catcall 感谢您的评论,我同意。我已经修改了图表。你能回顾一下并提出建议吗?谢谢
猜你喜欢
  • 2013-09-14
  • 1970-01-01
  • 2017-06-25
  • 2018-10-12
  • 1970-01-01
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-01-29
相关资源
最近更新 更多