我正在对实体关系图进行建模并陷入困境。我不确定我的考虑是否错误,或者 ERD 无法模拟我想要的内容:
我有三个实体:员工、项目和角色。员工和项目之间存在关系:员工正在从事项目。但该员工不仅仅在这个项目上工作,他/她还有一个作为角色指定的操作领域。但关系不就是用属性来描述的吗?我怎样才能做出类似“一名员工在这个项目上工作的身份......”?当然,我使用 roleId 作为属性,因为我将其设计为数据库,但是 ERD 中的关系是什么?
EMPLOYEE
PROJECT
ROLE
如果一名员工在每个项目中只能担任一个角色:
EMPLOYEE_PROJECT_MAP
- project_id(pk、fk 到项目)
- employee_id(pk、fk 到 EMPLOYEE)
- role_id(fk 到 ROLE)
如果一名员工每个项目只能拥有 1 个以上角色:
EMPLOYEE_PROJECT_MAP
- project_id(pk、fk 到项目)
- employee_id(pk、fk 到 EMPLOYEE)
- role_id(pk、fk 到 ROLE)
两者的区别在于复合主键在后一个版本中包含角色。成为一个合成的所有三列的主键,值的组合必须是唯一的,使得以下内容有效:
project_id employee_id role_id
---------------------------------
1 1 1
1 1 2
而如果 role_id 是not包含在复合主键中,仅one可以将用户和项目组合起来——这意味着一个用户只能拥有一个角色。
CHECK 约束不起作用 - 它只检查行,而不检查整个表。虽然触发器可以工作,但当您可以通过复合主键或唯一约束强制执行关系时,为什么还要麻烦呢?触发器在 ERD 中不可见,类似的语句也不可见CREATE TABLE
or DESC table_name
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)