Discuss the two main types of constraints on specializations and generalizations.
Two main constraints on specialization and generalization are:
1. Disjoint Constraint: This specifies that the subclasses of the specialization must be disjoint. This means that an entity can be a member of at most one of the subclasses of the specialization. A specialization that is attribute-defined implies the disjointness constraint if the attribute used to define membership predicate is single-valued.
If disjointness constraint holds true than specialization is disjoint. There might be a set of entities that are common to subclasses, this is a condition of overlap.
2. Completeness Constraint: This may be total or partial. A total specialization constraint specifies that every entity in the superclass must be a member of at least one of the subclass in the specialization. Partial specialization allows an entity not to belong to any of the subclasses.