我对关系数据库中不相交和重叠的设计约束之间的区别感到非常困惑。我环顾四周,但很难找到一个可以理解的例子。有人可以通过一个例子向我解释一下吗?
谢谢!
假设您有一个超级类“音乐家”,然后是两个子类“歌手”和“吉他手”。
在不相交的约束中,您必须将音乐家放在一个或其他子类中。在重叠约束中,音乐家可以同时加入。
假设您有一个超类“帐户”,其中包含子类“储蓄帐户”和“经常帐户”。这是一个不相交的约束情况,因为银行账户既可以是储蓄账户,也可以是活期账户。不能同时是两者。
对于重叠约束的情况,假设我们有一个超类“Person”和子类“Customer”和“Employee”。在这种情况下,一个人可以同时是客户和员工。因此,重叠。
让我们简化这个令人困惑的概念。首先,要明白子类型和超类型之间是有区别的。如果鉴别器的值不为空并且出现在超类型实体实例中,那么它必须与唯一的一个子类型链接。这称为不相交约束。
例如,您说在学校一个人可以是老师和学生,但老师不能是学生,反之亦然。然后在人的超类型和(学生,教师)子类型中存在一个称为 person_type 的鉴别器。如果人员实体中的 person_type 为“t”,则它仅与教师子类型相关联,而不与学生相关联。同样,我们可以为学生编写它。
现在,在重叠约束下,超类型实体实例可以出现在许多子类型实例中。
在重叠示例中,考虑教师也可以是学生。然后“t”可以与学生和教师子类型实体相关联。
假设成员是超类,它的两个子类一个是学生,第二个是教师,如果子类(学生或教师)的(成员)不是两者,那么它是不相交的。如果它的两个子类都成员,那么它是非不相交或重叠的。
.