DBMS中的ISA关系

时间:2013-04-02 18:45:54

标签: database database-design relational-database

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

enter image description here

在那里,它说,

"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节点?那有关系吗?

由于

5 个答案:

答案 0 :(得分:2)

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

(免责声明:阅读所有这一切都有点诙谐.ER从来没有真正意图在逻辑上完整和精确的表现力,而且有太多不同的ER方言,很难绝对肯定一些给定的方言试图表达的内容,以及如何以及它不寻求表达的内容)

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

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

但是(重复一遍)注意到这一切实际上都不是一成不变的。所有这些都取决于您的特定ER方言中使用的符号的预期语义。

答案 1 :(得分:1)

在我看来,当前的ISA节点(如上图所示)决定了员工的薪酬方式,因此只需在当前节点上添加另一个节点并不是很有意义,因为SeniorEmployees可以是每小时或者合同。

这有意义吗?

答案 2 :(得分:0)

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

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

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

如果没有SeniorEmployees独有的新属性,我只会将它们视为常规Employees,不需要创建新的子表。

答案 3 :(得分:0)

该模型存在问题。如果某个公司(兼职)的高级雇员和子公司的合同雇员(兼职)同时如何。哦,它破碎了。

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

看党模型(Silverston / Hay / Fowler)。

答案 4 :(得分:0)

ISA 的两大优势:

  1. 特定于子类的描述性属性。
  2. 参与关系的身份实体。