步驟7:特化/泛化實體(可選)
在邏輯模型中,可能會出現以下情況:兩個或多個實體存在共同的屬性,而這些屬性又是實體必須的部分,這就造成邏輯模型的冗余。
這種情況可以利用超類和子類來解決。超類是一個實體,包含若干個實體中出現的公共屬性;而子類是存放非公共屬性的實體,同時具有相應超類中的屬性特征。子類可以區分不同的角色,比如員工是一個實體,而經理、普通工人都是員工,同時經理和普通工人之間有差異,此時員工實體是經理實體、普通工人實體的超類,而經理實體和普通工人實體是員工實體的子類。
構造超類和子類的過程叫作特化/泛化。特化是一個自頂向下的過程,它先定義超類集合,然后定義有關的子類,這些子類集合的定義基于超類實體的一些特別特征。泛化是一個自下而上的過程,它從初始的子類中產生泛化的超類,是特化的逆過程。
超類和子類之間的關系根據子類是否包含超類的所有對象,可分為完全子類( CompleteSubtype)和不完全子類(Incomplete Subtype)。完全子類是指子類包含了超類的所有實體;不完全子類是指不能確定子類是否包含了超類的所有實體。
此外,超類和子類的關系可分為包含關系( Inclusive Subtype Relationship)和排外關系( Exclusive Subtype Relationship)。包含關系指的是超類的一個實體可以屬于一個或多個子類;而排外關系的超類中的一個實體最多只能屬于一個子類。
下面是一個總賬科目子類的例子,這是不完全子類(見圖4-9),超類與子類的關系屬于排外關系。
因為總賬科目還包括了權益類、費用類等科目,所以圖4-9所示關系是個不完全子類;一個科目不能既屬于資產類又屬于負債類科目,所以這種關系也是排外關系。