【问题标题】:Databases - What does it mean for an entity to be 'independent' exactly?数据库 - 实体“独立”究竟意味着什么?
【发布时间】:2018-02-06 00:12:40
【问题描述】:

我刚刚开始了数据库设计课程,并得到了一项作业,其中一项任务是根据以下 pdf 列出虚构医院的所有实体类型:http://docdro.id/mbzdtUg

我正在努力弄清楚什么应该是实体类型,什么不应该。我给你一个基本的例子:

“员工”显然是一个实体类型,但每个员工都必须有关于他们的资格和工作经验的详细信息。由于工作人员可以拥有多种资格和多种工作经验,因此这些不能成为属性……对吗?那么“员工资格”和“员工工作经历”应该是一个实体类型吗?

根据我读过的实体定义,实体应该是独立的并且代表实际存在的对象。一个实体完全独立意味着什么?如果实体类型“员工”不存在,则“员工资格”和“员工工作经验”实体类型将不存在。因此它们不是独立的(???),它们也不代表存在的东西(物理对象)。那么如果不是实体类型,它们是什么?例如,“约会”应该是实体类型吗?我真的很困惑......感谢任何帮助。

谢谢!

编辑:应该提到这应该遵循实体关系模型 (ER)

编辑 2:示例 2:患者可以是门诊患者或住院患者。我应该将它们制成 2 个实体类型还是仅 1 个(患者)?

【问题讨论】:

  • 存在学位等资格,独立于持有该资格的人。您必须区分人员、资格和人员与资格关系的链接表。
  • 但是如果我让“资格”完全独立于“员工”,我怎么知道哪个资格属于哪个员工? “资格”表必须具有某种外键属性(例如“StaffID”)才能知道要将其链接到哪个员工。
  • @Schytheron 我试图用我帖子中的示例架构图片来回答这个问题。您需要按照建议使用连接表来创建 1:M 和 M:1 链接
  • 根据 Vidmantas 的评论,我指定了一个“链接表”,即 StaffID、QualificationID 的关系——这种中间链接表很常见。
  • 好的,感谢您的帮助!

标签: sql database types entity


【解决方案1】:

看起来您走在正确的轨道上,并且您的理解是正确的。如果您预见到 Staff 表可以有多个资格或工作经验 - 那么资格和工作经验本身应该分开到不同的实体表中,Appointment 也应该如此。

这也是规范化的地方 - 因为您可以让两个不同的员工具有相同的工作经验(或资格) - 那么从技术上讲,您不希望只是简单地为员工创建一个子表,因为那样会导致大量数据重复。通常,使用规范化原则,您将创建一个单独的实体表 WorkExperience,您将在其中拥有所有不同的 WorkExperience。 Staff 和 WorkExperiences 表之间没有关系。但是您也将创建 StaffWorkExperiences 表(连接表/缓冲表),该表将是 Staff (1:M) 的子表,但也会对 WorkExperiences 表 (M:1) 有约束。所以基本上你最终会得到 Staff 表链接到 StaffWorkExperiences 表和 StaffWorkExperiences 表又链接到 WorkExperiences 表。

最后,如果您还有一张病床,并且该病患既可以是门诊病人也可以是住院病人 - 那么这更像是一种财产,不需要额外的桌子 - 所以您将只有一张病床,并且然后是另一列(PatientType 或类似的东西)来描述这个特定的属性。

编辑 我添加了一个示例模式,说明连接表的外观。

【讨论】:

  • 您用来制作该图表的站点/软件的名称是什么(我作业中的最后一项任务是制作 ER 图表,但我不知道该使用什么)?跨度>
  • 有很多,我用过的quickdatabasediagrams.com - 可以免费试用,或者draw.io 完全免费
  • 根据具体要求,链接很可能是 0/1 到很多,例如工作人员可能没有资格,工作人员可能没有资格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2015-10-29
  • 2020-06-05
  • 2021-08-01
  • 2012-10-23
  • 1970-01-01
相关资源
最近更新 更多