自然连接中的最大和最小元组数

时间:2014-03-26 21:16:16

标签: sql join relational-database tuples natural-join

我遇到了一个陈述

的问题

考虑以下与学生有关的关系模式

  • 数据库:学生( rollno ,姓名,地址)
  • 注册( rollno,courseno ,coursename)

其中主键以下划线显示。中的元组数量     学生和注册表分别为120和8。什么是最大值     和(学生*注册)中可以出现的最小元组数,     其中'*'表示自然连接?

我在互联网上看到过多种解决方案,例如thisthis

根据我的理解。最大元组应该是8,最小元组也应该是8,因为对于每个(rollnum,course),学生应该有一个卷数。任何可以在这方面提供帮助的人

4 个答案:

答案 0 :(得分:4)

如果存在参考约束,确保Enroll中的每个rollno也必须出现在Student中,那么最小值和最大值的答案都是正确的。然而,问题实际上没有提到任何这样的限制。没有必要假设RI约束只是因为rollno属性出现在两个表中而存在。所以最好的答案是0最小和8最大。如果这是一个多项选择题,而0,8不是给定答案之一,那么回答8,8 - 并告诉你的老师这个问题不清楚。

答案 1 :(得分:4)

我希望,你明白什么是自然加入。您可以查看here

如果表R和S包含公共属性,并且两个表中每个元组中该属性的值相同,则自然连接将产生n * m个元组,因为它将返回元组的所有组合。

考虑以下两个表

表R(具有属性A和C)

 A  |  C
----+----
 1  |  2
 3  |  2

表S(具有属性B和C)

 B  |  C
----+----
 4  |  2
 5  |  2
 6  |  2

自然连接R * S的结果(如果两个表中属性C的域相同)

 A | B |  C
---+---+----
 1 | 4 |  2
 1 | 5 |  2
 1 | 6 |  2
 3 | 4 |  2
 3 | 5 |  2
 3 | 6 |  2  

您可以看到R和S都包含属性C,在每个元组中值为2。表R包含2个元组,表S包含3个元组,其中Result表包含2 * 3 = 6个元组。

此外,在执行自然连接时,如果两个关系之间没有共同属性,自然连接将表现为笛卡尔积。在这种情况下,你显然有m x n作为最大元组数。

考虑以下两个表

表R(具有属性A和B)

 A  |  B
----+----
 1  |  2
 3  |  2

表S(具有属性C和D)

 C  |  D
----+----
 4  |  2
 5  |  2

自然连接的结果R * S

 A | B |  C |  D
---+---+----+----
 1 | 2 |  4 |  2
 1 | 2 |  5 |  2
 3 | 2 |  4 |  2
 3 | 2 |  5 |  2

希望这有帮助。

答案 2 :(得分:-1)

如果您询问可能出现在R和S的自然连接中的最大元组数 它是两个元组的笛卡尔积

答案 3 :(得分:-1)

是的答案应该是8,8。 因为Rollno是Student表中的键,而rollno,courseno是复合键。 学生与登记表之间的关系为1:M。 因此,最大元组数与多边相同。 8 如果外键以其他方式存在,则元组的最小数目为8。

所以答案是8,8。