Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库管理系统中的ISA关系_Database_Database Design_Relational Database - Fatal编程技术网

Database 数据库管理系统中的ISA关系

Database 数据库管理系统中的ISA关系,database,database-design,relational-database,Database,Database Design,Relational Database,我正在读罗摩克里希南写的《数据库管理系统简介》,在那里我看到了下面的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

我正在读罗摩克里希南写的《数据库管理系统简介》,在那里我看到了下面的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节点?那有关系吗


谢谢

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

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

因此,这个例子的含义是,资深员工应该有一些新的栏,例如存储服务年限奖励或其他

如果没有老年员工独有的新属性,我只会将其视为普通员工,无需创建新的子表。

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

(免责声明:这一切都有点开玩笑。ER从来没有真正打算在逻辑上完整和准确地表达其表达能力,而且有如此多不同的ER方言,以至于很难绝对确定某些特定方言想要表达什么,如何表达,以及不想表达什么)

您将失去的是各种“子实体”之间的排他性特征。您所给出的示例设计可能是为了明确地记录这样一个概念,即员工永远不可能同时是小时管理计划和合同管理计划

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


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

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

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


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

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

这有意义吗

ISA的两个优点:

  • 特定于子类的描述性属性
  • 参与关系的标识实体

  • 可能是因为来自任何给定ISA的选择必须是相互排斥的。雇员可以是小时制的,也可以是合同制的。再加上Senior,它不是第三个分支,它是一种完全不同类型的ISA关系。@NealB那么你是说,既然小时工和合同工在某种程度上是相关的,我们使用相同的ISA节点,但对Senior员工使用相同的ISA节点是错误的,还是使用另一个ISA节点只是为了可读性更好?谢谢,但事实上这不是我要问的。假设资深员工具有新的属性,我们将建立ISA关系。我想知道的是,为什么我们需要另一个ISA节点?我们不能使用现有的ISA节点来创建这种关系吗?