如何代表一个分类很多一对多数据库关系,其中的类别是特定的关系的一个侧面(How to represe

2019-09-18 15:07发布

我正在建立一个数据库来管理项目任务,而这让我特别麻烦的一个部分是职称的与每一个项目中,他们正在对员工的分配。

要求

  1. 员工可以在同一时间内处理多个项目
  2. 一个项目上有多个员工
  3. 一个项目有多个职位名称
  4. 雇员工作在一个项目下的项目的职称的只有一个
  5. 多个员工可以在同一职位工作,在项目

我不知道如何来表示这个用表格; 每一个布局我拿出任何能够为雇员在一个项目下的职位由不同的项目工作,或者他们能够在两种不同的工作头衔在同一项目上工作。

例的图

基本上,我有三个表:

  • 项目
    • 项目名称(唯一的)
    • 项目ID
  • 雇员
    • 员工姓名(唯一)
    • 员工ID
  • 职称
    • 标题
    • 项目编号(名称,专案编号是唯一的)
    • 标题ID

然后交叉引用表,称为分配。 有两种方式我都拿出了迄今为止的分配如下:

实施例1

  • 分配
    • 员工ID
    • 项目ID(雇员-专案编号是唯一的)
    • 标题ID(唯一)
    • AssignmentID

这种方式限制了员工每个项目一个冠军,但允许他们使用不属于在分配该项目的标题。

实施例2

  • 分配
    • 员工ID
    • 标题ID(雇员-TitleID唯一的)
    • AssignmentID

这样分配的员工通过标题的项目,所以不可能指派专人到项目与一个无效的称号。 然而,这允许员工将被分配给在多个标题相同的项目。

同样,图表都可以在这里: http://i.imgur.com/IbR0P.png

我知道必须有一个干净地做到这一点,但我还没有在数据库设计任何真正的正式训练,我找不到,除了如何让许多一对多的关系,这难道不是”通过我的任何搜索牛逼正是我需要帮助。

谢谢!

  • 编辑1
    • 加粗的主键字段(图中的图像进行了强调,但很难说,因为他们是最后一个字段)
    • 新增AssignmentID(主键),以分配表中的问题(存在于设计中,忘记创建问题&图时包括)
  • 编辑2
    • 新增失踪的要求(5)
    • 添加的报头的例子和要求
  • 编辑3
    • 我有10个代表了,所以我可以把图!
  • 编辑4
    • 增加了独特的按键标识符(个人独特的键在图确定的,但我不知道该怎么办在DIA复合键)

Answer 1:

ID字段添加到您Job Titles表-姑且称之为JobTitleID

现在,您的Assignments表有Employee IDJobTitleID

这显然意味着,该找项目的员工,你需要通过加入Assignments Job Titles

编辑

在意见讨论后,请忽略上面的,我把它仅仅作为历史。

现在,这里是新版本:您的Assignments表的需求(因为你已经考虑)

  • 员工ID
  • 项目ID
  • 标题ID
  • AssignmentID

但它也需要一个UNIQUE INDEX(EmployeeID, ProjectID) -这将使它不可能为了一个员工是在不同的标题相同的项目。

在相同的标题多名员工仍然会被允许的,以及在一个员工的不同项目中的多个标题。



Answer 2:

做你提到的第一种方式。 它并不限制一个人一个职位,你可以创建一个员工ID和项目ID再创纪录,但有不同的名称标识,只是用一个新的分配ID作为主键。

你甚至可能要采取项目ID了职位表。



文章来源: How to represent a categorized many-to-many database relationship where categories are specific to one side of the relationship