【问题标题】:Can my ERD have a triangular relationship between 3 entities?我的 ERD 可以在 3 个实体之间建立三角关系吗?
【发布时间】:2021-04-26 17:02:02
【问题描述】:

项目---技能---员工

一个项目需要很多技能。 许多项目都需要一项技能。

一名员工可以拥有多种技能。 许多员工都可以“拥有”一项技能。

这些信息是否足以推断出哪些员工参与了哪些项目?还是应该在项目和员工之间建立另一种关系?

像这样: 一个项目可以有很多员工。 一名员工可以参与许多项目。

所以它基本上会变成这三个实体的三角形,中间有弱实体?还是有更好的解决方案?

【问题讨论】:

  • 我会在项目和员工之间添加另一个关系。仅仅因为员工具有必要的技能并不意味着她/他是项目的一部分。毕竟,一个员工可以从事多少个项目是有一个自然上限的。
  • 这取决于您要建模的内容,但项目与员工的关系是主要关系。项目到技能和员工到技能是次要的多对多关系。
  • 可以为员工、技能和项目定义三元关系。但我不知道这种关系在主题中意味着什么。你想建模什么?

标签: postgresql database-design erd


【解决方案1】:

如果您已经了解如何自动表达图表,那么 ERD 非常棒。如有疑问,请使用纯文本:谓词、约束、关系。比 ERD 更好、更强大。

-- Project PRO exists.
--
project {PRO}
     PK {PRO}
-- Employee EMP exists.
--
employee {EMP}
      PK {EMP}
-- Skill SKL exists.
--
skill {SKL}
   PK {SKL}
-- Employee EMP has skill SKL.
--
emp_skl {EMP, SKL}
     PK {EMP, SKL}

FK1 {EMP} REFERENCES employee {EMP}
FK2 {SKL} REFERENCES skill    {SKL}
-- Project PRO requires skill SKL.
--
pro_skl {PRO, SKL}
     PK {PRO, SKL}

FK1 {PRO} REFERENCES project {PRO}
FK2 {SKL} REFERENCES skill   {SKL}
-- Employee EMP with skill SKL, is assigned
-- to project PRO, that requires that skill.
--
emp_pro {EMP, PRO, SKL}
     PK {EMP, PRO}

FK1 {EMP, SKL} REFERENCES emp_skl {EMP, SKL}
FK2 {PRO, SKL} REFERENCES pro_skl {PRO, SKL}

注意:

All attributes (columns) NOT NULL

PK = Primary Key
FK = Foreign Key

【讨论】:

  • 有时,即使员工没有所需的技能,他们也会被分配到项目中。
猜你喜欢
  • 2011-05-04
  • 2021-12-24
  • 1970-01-01
  • 2018-07-29
  • 1970-01-01
  • 1970-01-01
  • 2011-04-12
  • 2023-03-27
  • 2018-07-09
相关资源
最近更新 更多