dbms中的总特化和不相交规则之间的区别?

时间:2014-04-08 05:38:21

标签: database

两者对我来说都是一样的。我没有得到确切的尊重。我搜索不同的论坛和网站,但没有明确。他们之间有什么区别?

enter image description here

3 个答案:

答案 0 :(得分:2)

参与总人数与部分参与人数。 在完全参与中,患者必须是门诊或住院患者,不能简单地是超类患者类型。部分参与允许您让患者成为患者。

在Total specialization下,不能有超类但不属于任何子类的实体。这由患者绘制的双线表示

脱节是指子类型患者既可以是门诊患者也可以是常住患者,但不能同时使用两者。子类只能是超类中的一个子类,而不是两者。

因此,在两个图中,患者必须是其中一个子类,但不相交意味着它不能是两个子类。

答案 1 :(得分:2)

确切的区别如下。您必须先分离全部/部分参与约束,才能更好地理解这一点,稍后我们将考虑它们。

不相交约束

任何实例最多可以映射到一个子类。不止于此。例如,银行帐户可以是“储蓄帐户”,也可以是“活期帐户”,但不能同时使用。因此,当数据库可操作时,每个给定的实例都将被映射到恰好在超类下定义的一个子类。另一个例子是一顿饭将被映射到素食主义者或非素食主义者。

部分约束

任何实例都可以映射或不映射到给定超类的多个子类。当一个实例扮演多个角色而不仅限于一个角色时,通常会发生这种情况。例如,员工可以映射到主管,经理或两者。这意味着员工可以同时扮演经理和主管的角色。另一个例子是音乐家,他可能映射到小提琴演奏者,吉他演奏者,长笛演奏家,萨克斯管演奏家或所有这些人。

注意: 因此,当您指定“ ISA”关系时,您的子类可能以不相交或重叠的方式运行。它们不能两者兼有,这意味着不相交与重叠约束完全相反。

现在让我们集中讨论全部约束和部分约束。

无论重叠/不连续约束如何,总/局部均值“所有实例是否都支持专业化?”题。因此,当数据库可操作并且您的ISA关系是完整的时,任何传入的实例都将被定向到子类之一,并且任何类都不会保留在父类中。相反,如果它是局部的,则某些实例可能没有适当的子类,因此它们将保留在超类中。

这引起了如下有趣的概念。

完全不相交-所有即将出现的实例将仅映射到一个子类,并且不会在其他子类之间共享

部分不相交-所有即将出现的实例,可能仍属于超类或仅映射到子类之一

总重叠量-所有即将出现的实例都将映射到多个子类。

部分重叠-所有即将出现的实例可能都属于超类,或映射到多个子类。

答案 2 :(得分:1)

当您使用全面专业化时,在所示示例中,患者必须是门诊患者或居住患者,这意味着所有患者都需要是其中一种子类型(门诊患者或居民)。

不相交的规则与患者只需要处于一种亚型的方式不同。

基本上,正如我所理解的那样,不同之处在于总特化说超级类型需要在子类型中,而不相交则表示它只需要在一个子类型中。

我希望这会有所帮助。

您可以阅读有关所有这些类型和规则的链接: http://www.tomjewett.com/dbdesign/dbdesign.php?page=subclass.php