3

我正在建立一个数据库来管理项目分配,而给我带来特别麻烦的一个部分是为员工分配他们正在从事的每个项目的职位。

要求

  1. 一个员工可以同时参与多个项目
  2. 一个项目有多个员工
  3. 一个项目有多个职位
  4. 员工在项目的一个职位下工作
  5. 多个员工可以在一个项目中以相同的职位工作

我不确定如何使用表格来表示它;我想出的每个布局要么使员工能够以不同项目的职位从事项目工作,要么他们能够以两个不同的职位从事同一个项目。

示例图

问题末尾的图片链接

基本上,我有三个表:

  • 项目
    • 项目名称(唯一)
    • 项目编号
  • 雇员
    • 员工姓名(唯一)
    • 员工ID
  • 职称
    • 标题
    • 项目 ID(Title-ProjectID 唯一)
    • 标题 ID

然后是一个交叉引用表,称为分配。到目前为止,我为作业提出的两种方法如下:

示例 1

  • 作业
    • 员工ID
    • 项目 ID(EmployeeID-ProjectID 唯一)
    • 标题 ID(唯一)
    • 作业 ID

这种方式将员工限制为每个项目一个头衔,但允许他们在分配中使用不属于该项目的头衔。

示例 2

  • 作业
    • 员工ID
    • 职务 ID(EmployeeID-TitleID 唯一)
    • 作业 ID

这种方式通过职称将员工分配到项目中,因此不可能将某人分配到具有无效职称的项目中。但是,这允许将员工分配到多个头衔下的同一项目。

同样,图表可在此处获得:http: //i.imgur.com/IbR0P.png

我知道必须有一种方法可以干净地做到这一点,但我没有接受过任何真正的数据库设计方面的正式培训,除了如何建立多对多关系之外,我无法通过搜索找到任何东西,这不是这正是我需要帮助的地方。

谢谢!

  • 编辑 1
    • 粗体主键字段(在图表图像中加下划线,但很难分辨,因为它们是最后一个字段)
    • 在问题中的分配表中添加了 AssignmentID(主键)(存在于设计中,在创建问题和图表时忘记包含)
  • 编辑 2
    • 添加了缺失的要求 (5)
    • 添加了示例和要求的标题
  • 编辑 3
    • 我现在有10个代表,所以我可以放图表!
  • 编辑 4
    • 添加了唯一键的标识符(图中标识的各个唯一键,但我不知道如何在 DIA 中执行复合键)
4

2 回答 2

2

向您的表添加一个 ID 字段Job Titles- 我们称之为JobTitleID

现在你的Assignments桌子有Employee IDJobTitleID

这当然意味着,要找到员工的项目,您需要通过AssignmentsJob Titles表连接

编辑

在评论中讨论后,请忽略以上内容,我仅将其作为历史。

现在这是新版本:您的Assignments桌子需要(您已经考虑过)

  • 员工ID
  • 项目编号
  • 标题 ID
  • 作业 ID

但它也需要一个UNIQUE INDEX(EmployeeID, ProjectID)——这将使一名员工不可能以不同的头衔在同一个项目中。

仍然允许同一头衔下的多名员工,以及一名员工在不同项目中的多个头衔。

于 2012-06-27T14:35:00.640 回答
0

按照您提到的第一种方式进行。它不会将一个人限制为一个职位,您可以使用相同的 Employee ID 和 Project ID 但使用不同的 Title ID 创建另一条记录,只需使用新的 Assignment ID 作为主键。

您甚至可能想从职位表中取出项目 ID。

于 2012-06-27T14:35:29.603 回答