不相交和重叠的设计约束

时间:2013-11-12 04:40:11

标签: database

我对关系数据库中不相交和重叠设计约束之间的区别感到困惑。我环顾四周,但很难找到一个可以理解的例子。有人可以通过一个例子向我解释一下吗?

谢谢!

5 个答案:

答案 0 :(得分:11)

假设你有一个超级班的音乐家'那么两个子类'歌手'和吉他手'。

在不相交的约束中,你必须将音乐家放在一个或另一个子类中。在重叠约束中,音乐家可以放在两者中。

答案 1 :(得分:6)

让我们说你有一个超级班的帐户'与子类'储蓄账户'和'经常账户'。这是一个不相交的约束情况,因为银行帐户可以是Savings或Current。它不能同时出现。

对于重叠的约束情况,我们假设我们有一个超级班级' Person'和子类'客户'和'员工'。在这种情况下,一个人可以是客户和员工。因此,重叠。

答案 2 :(得分:1)

让我们简化这个令人困惑的概念。首先,要了解子类型和超类型之间存在区别对待。如果鉴别器的值不为空并且出现在超类型实体实例中,那么它必须与唯一的一个子类型链接。这称为不相交约束。

例如,你说在学校里一个人可以是老师和学生,但老师不能成为学生,反之亦然。然后在人的超类型和(学生,教师)子类型中存在称为person_type的鉴别器。如果person_type in person entity是' t'然后它与教师子类型仅链接,而不与学生联系。同样,我们可以为学生写它。

现在,在重叠约束中,超类型实体实例可以出现在许多子类型实例中。

在重叠的例子中,考虑教师也可以是学生。那么' t'可以与学生和教师子类型实体链接。

答案 3 :(得分:0)

不相交规则规定超类型的实体实例只能是一个子类型的成员。重叠规则规定超类型的实体实例可以是多个子类型的成员。

不相交规则的示例: 超级类型 动物的实例只能是其中一个子类型的成员 Panda, <强>猎豹和 Disjoint Union,(动物可以是熊猫,也可以是狗,也可以是猎豹,但不能同时是两个或两个以上)

重叠规则的示例: 超级类型的实例 可以是多个子类型的成员 女性, 驱动程序工程师 Overlapping Union,(一个人可以是一个女人,同一个女人可以成为司机,同一个女人可以同时担任工程师)

答案 4 :(得分:0)

假设会员是超级班,其两个子班一个是学生,第二个是教师,如果(成员)子类(学生或教师)不是两者都那么它是不相交的。 如果成员都是它的子类,那么它就是非分离或重叠的。