数据库系统概论笔记四——E-R图的集成

在开发一个大型的信息系统时,最经常采用的策略是自顶向下的进行需求分析,然后再自底向上的设计概念结构。即首先设计各子系统的分E-R图,然后将它们集成起来,得到全局E-R图。

E-R图的集成一般需要分两步走:

1.解决各分E-R图之间的冲突,合并E-R图,生成初步E-R图

各子系统的E-R图之间的冲突主要有三类:属性冲突命名冲突结构冲突

属性冲突主要包含以下两类:

  • 属性域冲突,即属性值的类型、取值范围或取值集合不同
  • 属性取值单位冲突

命名冲突主要包含以下两类:

  • 同名异义,即不同意义的对象在不同的局部应用中具有相同的名字
  • 义名同义,即同一意义的对象在不同的局部应用中具有不同的名字

结构冲突主要包含以下三类:

  • 同一对象在不同的应用中具有不同的抽象。例如职工在某一局部应用中被当作实体,而在另一局部应用中则被当作属性。解决方法通常是结合两个准则将属性变换成实体或将实体变换成属性,使同一对象具有相同的抽象。
  • 同一实体在不同子系统的E-R图中所包含的属性个数和属性排列次序不完全相同。解决方法是使该实体的属性取各子系统的E-R图中属性的并集,再适当调整属性的次序。
  • 实体间的联系在不同的E-R图中为不同的类型。解决方法是根据应用的语义对实体联系的类型进行综合或调整。例如:零件和产品之间存在多对多的联系“构成”,产品、零件与供应商三者之间还存在多对多的联系“供应”(一个供应商可以给多个产品供应多种零件,一个产品可以使用多个供应商供应的零件,一个零件可以由多个供应商供给),这两个联系互相不能包含,则在合并两个E-R图时就应该把它们综合起来,如下图:

2.消除不必要的冗余,设计基本E-R图

在初步E-R图中可能存在一些冗余的数据和实体间冗余的联系。所谓冗余的数据是指可由基本数据导出的数据,冗余的联系是指可由其他联系导出的联系。

消除冗余的方法主要有:

  • 分析方法。根据数据项之间的逻辑关系来消除冗余,例如:

图中Q3=Q1*Q2Q4=\sum Q5,所以Q3和Q4是冗余数据,可以消去;并且由于Q3消去,产品和材料之间的m:n的冗余 联系也应消去。

并不是所有的冗余数据和冗余联系都必须加以消除,有时为了提高效率,不得不以冗余信息为代价。因此哪些冗余信息必须消除,哪些冗余信息存在,需要根据用户的整体需求来确定。如果认为地保留了一些冗余数据,则应把数据字典中数据关联的说明作为完整性约束条件。

例如,若物种部门经常要查询各种材料的库存量,如果每次都要查询每个仓库中此种材料的库存,再对它们求和,查询效率就太低了。所以应保留Q4,同时把Q4=\sum Q5定义为Q4的完整性约束条件。每当Q5修改后,就触发该完整性检查,对Q4作相应的修改。

  • 规范化理论来消除冗余,具体方法如下:

(1)确定分E-R图实体之间的数据依赖。实体之间一对一、一对多、多对多的联系可以用实体码之间的函数依赖来表示。(设R(U)是属性集U上的关系模式,X,Y是U的子集,若对于R(U )的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不相等,则称X函数确定Y或Y函数依赖于X,记作X->Y)

劳动人事管理分E-R图如下图所示:

图中,部门与职工之间一对多的联系可以表示为职工号->部门号;

职工与产品之间多对多的联系可以表示为(职工号,产品号)->工作天数等。

于是有了函数依赖集FL。

(2)求FL的最小覆盖GL,差集为D=FL-GL。逐一考察D中的函数依赖,确定是否是冗余的联系,若是就把它去掉。

猜你喜欢

转载自blog.csdn.net/skye_95/article/details/81215014