我正在阅读由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节点?那有关系吗?
由于
答案 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 的两大优势: