ERD - 如何使用第三个实体建模两个entites之间的关系作为"属性"

Mat*_*asG 3 database-design erd entity-relationship data-modeling

我正在建立一个实体关系图并且卡住了.我不确定我的考虑是否错误或者ERD无法模仿我想要的东西:

我有三个实体:员工,项目和角色.Employee和Project之间存在关系:员工正在处理项目.但是这名员工不仅仅是在这个项目上工作,他/她还有一个作为角色的运营领域.但这不是一个属性所描述的关系吗?我怎样才能做出类似"员工在这个项目上工作......"的内容?当然我使用roleId作为属性,因为我将其设计为数据库,但是ERD中的关系是什么?

OMG*_*ies 5

雇员

  • employee_id(pk)

项目

  • project_id(pk)
  • 项目描述

角色

  • role_id(pk)
  • role_description

如果员工每个项目只能有一个角色:

EMPLOYEE_PROJECT_MAP

  • project_id(pk,fk to PROJECT)
  • employee_id(pk,fk to EMPLOYEE)
  • role_id(fk到ROLE)

如果员工每个项目只能有1个以上的角色:

EMPLOYEE_PROJECT_MAP

  • project_id(pk,fk to PROJECT)
  • employee_id(pk,fk to EMPLOYEE)
  • role_id(pk,fk to ROLE)

两者之间的区别在于复合主键包含后一版本中的角色.作为所有三列的复合主键,值的组合必须是唯一的,使得以下内容有效:

project_id  employee_id  role_id
---------------------------------
1           1            1
1           1            2
Run Code Online (Sandbox Code Playgroud)

如果组合主键中没有包含role_id ,则只能创建用户和项目的一个组合 - 这意味着用户只能拥有一个角色.

CHECK约束不起作用 - 它只检查行,而不是整个表.虽然触发器可以工作,但是当您可以通过复合主键或唯一约束强制执行关系时,为什么还要烦恼?触发器不会在ERD是可见的,也不像陈述CREATE TABLEDESC table_name.

  • @Randy:但桌子需要一个PK,所提供的PK是完美的; 为什么要添加另一列(对于你想到的任何PK)并添加另一个索引?心灵难以置信. (2认同)