步骤7:特化/泛化实体(可选)
在逻辑模型中,可能会出现以下情况:两个或多个实体存在共同的属性,而这些属性又是实体必须的部分,这就造成逻辑模型的冗余。
这种情况可以利用超类和子类来解决。超类是一个实体,包含若干个实体中出现的公共属性;而子类是存放非公共属性的实体,同时具有相应超类中的属性特征。子类可以区分不同的角色,比如员工是一个实体,而经理、普通工人都是员工,同时经理和普通工人之间有差异,此时员工实体是经理实体、普通工人实体的超类,而经理实体和普通工人实体是员工实体的子类。
构造超类和子类的过程叫作特化/泛化。特化是一个自顶向下的过程,它先定义超类集合,然后定义有关的子类,这些子类集合的定义基于超类实体的一些特别特征。泛化是一个自下而上的过程,它从初始的子类中产生泛化的超类,是特化的逆过程。
超类和子类之间的关系根据子类是否包含超类的所有对象,可分为完全子类( CompleteSubtype)和不完全子类(Incomplete Subtype)。完全子类是指子类包含了超类的所有实体;不完全子类是指不能确定子类是否包含了超类的所有实体。
此外,超类和子类的关系可分为包含关系( Inclusive Subtype Relationship)和排外关系( Exclusive Subtype Relationship)。包含关系指的是超类的一个实体可以属于一个或多个子类;而排外关系的超类中的一个实体最多只能属于一个子类。
下面是一个总账科目子类的例子,这是不完全子类(见图4-9),超类与子类的关系属于排外关系。
因为总账科目还包括了权益类、费用类等科目,所以图4-9所示关系是个不完全子类;一个科目不能既属于资产类又属于负债类科目,所以这种关系也是排外关系。