2

我正在阅读 Ramakrishnan 编写的数据库管理系统简介,我遇到了以下 ER 图:

在此处输入图像描述

那里,它说,

"For example, we might identify a subset of employees as Senior Emps. We can 
modify Figure 2.12 to reflect this change by adding a second ISA node as a 
child of Employees and making Senior Emps a child of this node."

我的问题是,为什么我们需要另一个 ISA 节点?为什么我们不直接将这个新实体添加到当前的 ISA 节点?这有关系吗?

谢谢

4

5 回答 5

2

“我们不能使用现有的 ISA 节点来创建这种关系吗?”

(免责声明:读完这一切有点半开玩笑。ER 从来没有真正打算在其表达能力上做到逻辑上的完整和精确,而且有这么多不同的 ER 方言,很难绝对确定一些给定的方言试图表达,以及它不试图表达的方式和内容)

您将失去的是各种 IS_A“子实体”之间的排他性特征。您给定的示例设计可能旨在明确记录员工永远不能同时是 hourly_emp 和 contract_emp 的概念。

如果员工既可以是“高级”又可以是“合同”,它们之间没有排他性,如果 ER 方言的 IS_A 三角形打算准确表达这种排他性,那么你的解决方案将是错误的。

但是(重复)请注意,这一切都不是一成不变的。这一切都取决于您在特定 ER 方言中使用的符号的预期语义。

于 2013-04-02T19:41:31.983 回答
1

在我看来,当前的 ISA 节点(即上图)决定了员工的薪酬方式,因此简单地在当前节点上添加另一个节点并没有多大意义,因为 SeniorEmployees 可以是小时工也可以是合同工。

那有意义吗?

于 2014-01-08T20:53:37.807 回答
0

创建具有 ISA 关系的任何实体的原因是为新实体提供附加属性。

就像在面向对象的建模中一样,您将创建一个新的子类,以便新类可以拥有相对于其超类的附加数据或附加方法。

因此,该示例的含义是 SeniorEmployees 应该有一些新列,例如存储服务年限或其他东西的奖励。

如果没有 SeniorEmployees 独有的新属性,我会将它们与普通员工一样对待,无需创建新的子表。

于 2013-04-02T18:56:38.570 回答
0

这种模式是有问题的。如果某人同时是一家公司的高级员工(兼职)​​和子公司的合同员工(兼职)​​,该怎么办。哦,它破碎了。

问题是一个人不是雇员。一个人是与其他方有零个或多个关系的人。

看看派对模型(Silverston / Hay / Fowler)。

于 2013-04-03T17:55:20.527 回答
0

ISA的两个优点:

  1. 特定于子类的描述性属性。
  2. 参与关系的身份实体。
于 2021-02-07T01:22:08.100 回答