冲突主要分为三类:属性冲突、命名冲突和结构冲突。
属性冲突
- 属性冲突:属性值域、取值
- 属性域冲突,即属性值的类型、取值范围不一致。例如,员工的工号是使用数值型还是字符型。
- 属性取值冲突。例如,学生的成绩有的以百分制计,有的以五分制计。
- 这类冲突是由于用户在业务上的约定而引起,必须由用户协商解决。
命名冲突
- 命名冲突可能发生在实体、属性和联系上,常见的为属性冲突。
- 同名异义:不同意义的对象在不同的局部应用中具有相同的名字。例如,“单位”既可以表示人员所在部门,也可以作为长度、重量等度量的属性。
- 异名同义:同一意义的对象在不同的局部应用中具有不同的名字。例如学校的“系别”与“学院”实际上是同一实体。
- 这类冲突通常可以采取行政手段进行协商解决。
结构冲突
- 同一对象在不同局部应用中具有不同的身份。例如局部模型A中的某实体在另一局部模型 B 中被设计为属性,这就造成了结构上的冲突。
解决方法:将实体转化为属性或将属性转化为实体,保持结构的统一。 - 同一对象在不同局部应用中的属性组成不完全相同。例如,对同一类“员工”这一对象,在局部模型 A 中其属性为工号、姓名、性别、年龄4个属性,而在另一局部模型 B 中的属性为工号、姓名、所在部门 3 个属性组成。
解决方法:对实体的属性取其在不同局部应用中的并集,并适当设计好属性的次序。 - 相同实体之间的联系在不同局部模型中不一致。例如,在局部应用 A 中实体 E1 和 E2 是一对多联系,而在局部应用 B 中却是多对多联系。
解决方法:根据应用语义对实体联系的类型进行综合或调整。