俯瞰整个数据库生命周期如下图所示。在前面的内容中我们已完成了“确定需求”和“数据模型”图中以灰色标出本小节我们将详细讨论“视图集成”图中以红色标出把基于不同用户视角的局部ER图集成为一个统一的、没有冗余的全局ER图在数据库设计流程中非常重要。单个局部ER图是通过分析用户需求进行概念数据建模得到的全局ER图是通过对各个局部ER图进行分析解决其中存在的视角和术语差异最终进行组合得到的。为什么会产生不一致的局部ER图当不同的用户或用户组从各自的视角来看业务时就会产生各异的ER图。举例来说市场部趋向于把整个产品作为销售的基本单元但工程部可能更关注组成产品的单个零件。另一个例子一个用户可能关注项目的目标和产生的价值而另一个用户则关心项目需要占用的资源和所涉及的人员。上述的这些差异造成了各个ER图之间不一致的关系和术语。ER图的不一致性会表现为不同的泛化程度不同的关系连通数一对多、多对多等不同用户视角定义的实体、属性或关系相同的概念不同的人使用了不同的名称与建模形式。举例来说同一个现实场景客户下订单订购产品从三个不同视角建模得到的ER图如下。图1 把order看作实体图2 把order看作关系图3 把order看作属性图1中Customer、Order、Product描述为实体把“places”和“for-a”描述为关系。图2中“orders”定义为Customer和Product之间的关系。图3中“orders”关系被另一个关系“purchases”代替。“order-no”被作为关系“purchases”的一个属性。同是订单order从不同视角出发在ER图中被表示为实体、关系、属性。视图集成的步骤局部ER图概念数据模型的集成一般有如下四个步骤。集成策略选择比较实体关系图统一实体关系元素合并、重构实体关系图我们一一对这四个步骤进行讨论。集成策略选择通常的集成策略有1.每次集成2个局部ER图。2.每次集成n个局部ER图n大于2且小于等于总ER图数。相对来说第一种集成策略每次所涉及的实体、关系数量较少也更容易掌控。比较实体关系图设计者需要仔细观察不同ER图中的对应实体发现其中因视角不同而存在的冲突。命名上的冲突包括“同物异名”和“异物同名”。“同物异名”是指同一个概念使用了不同的名称可以通过检视数据字典命名及其描述对应表来发现。“异物同名”是指对不同的概念使用了相同的名称需要通过检视不同ER图中相同的名称来发现。结构性冲突的表现形式更多。类型冲突包括使用不同的构造方式建模同一概念。以图1、2、3为例order这一概念可以建模为一个实体一个关系或一个属性。依赖冲突是指类似或相同的关系在不同的局部ER图中被建模成不同的连通数。解决这种冲突的一种方法是使用最一般的连通数约束如多对多。若这样做会造成语义上的错误则说明两种关系概念不同不能合并应进行改名并让每个关系保持各自的连通数。键冲突是指在不同的局部ER图中同一概念的实体被分配了不同的键。举例来说当一名员工的全名、员工号、员工身份证号在不同的局部ER图中被作为员工的键时就出现了键冲突。统一实体关系元素基本目标是解决各局部ER图中的冲突使这些元素一致化为最终的ER图集成做准备。要解决各局部ER图之间的冲突通常需要设计开发人员与用户进行积极的沟通了解、分析、理解冲突元素的真实语义。我们可能需要对某些ER图中的实体及键属性进行改名。各局部ER图中被建模为实体、关系或属性的同一概念需要统一转化为三种形式之一。集成具有相同的度、角色和连通数属性的关系相对较为容易但集成上述特征不同的关系就较为困难。若同一关系在不同局部ER图中表现形式不一致则必须进行统一。如某一关系在一局部ER图中为泛化层次关系在另一局部ER图中为排他性或exclusive OR关系这种情况必须统一。合并、重构实体关系图合成和重构局部ER图最终得到完整、最简约和可理解的全局ER图。完整是要求在全局ER图中所有组件的语义完整。最简约是要求去除全局ER图中的冗余。冗余的概念包括重叠的实体、多余的语义关系等。例如“社会车辆”和“私家车”可能是重叠的两个实体教授与学生之间的“指导”和“建议”关系可能代表了同一种活动需要进一步确定是否存在冗余。可理解要求全局ER图能被整个项目组成员和最终用户理解。在进行ER图集成过程中我们可以首先将相同概念的组件进行集成之后对获得的初步全局ER图进行重构以使其满足上述三方面的要求。举例来说集成后的ER图包含超类实体与子类实体的层次组合若超类实体中的属性已涵盖子类实体中的某些属性则子类实体的这些属性可以去除。了解目标让我们看一下两张具有重叠数据的局部ER图。这两张ER图是对两组不同用户访谈后画出的。图4是一张以报表为关注点的ER图其中包含发布报表的部门、报表中的主题和报表提交的对象。图4 关注报表图5的ER图以发布作为关注中心把发布内容中的关键词建模为另一个实体。图5 关注发布我们的目标是整合这两张ER图并保证合成后的ER图语义完整、形式最简约且易理解。集成步骤首先在两张局部ER图中寻找是否存在“同物异名”与“异物同名”现象。图4中的实体Topic-area与图5中的实体Keyword为“同物异名”虽然两个实体的属性不完全相同但两者属性是兼容的可以进行统一化。对图5进行修改可得到图6。图6 Keyword换为Topic_area其次再来看两张ER图之间的结构性冲突。图4中的实体Department与图5中的属性dept-name为类型冲突。解决该冲突的方法是保留强类型实体Department把属性dept-name移至实体Department中。解决该冲突把ER图6转化为ER图7。图7 属性dept-name转化为一个实体和一个属性比较变化后的各局部ER图寻找之间的“共同之处”进行合并。 在真正合并之前必须确认这些“共同之处”的语义概念完全等同这也保证了合并后语义的完整性。在ER图4与ER图7中有两个共同实体Department和Topic-area且语义一致。初步合并后的全局ER图如图8所示。