Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 自然联接中的最大和最小元组数_Sql_Join_Relational Database_Tuples_Natural Join - Fatal编程技术网

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

Sql 自然联接中的最大和最小元组数,sql,join,relational-database,tuples,natural-join,Sql,Join,Relational Database,Tuples,Natural Join,我遇到了一个问题 考虑以下与学生相关的关系模式 数据库:学生(rollno,姓名,地址) 注册(rollno,courseno,coursename) 其中主键带下划线。表中的元组数 学生表和报名表分别为120和8。最高限额是多少 以及(Student*Enroll)中可以出现的最小元组数, 其中“*”表示自然连接 我在互联网上看到了几种解决方案,如或 据我了解。最大元组数应该是8,最小元组数也应该是8,因为对于每个元组(rollnum,course),学生中应该有一个rollnum。任何能

我遇到了一个问题

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

  • 数据库:学生(rollno,姓名,地址)
  • 注册(rollno,courseno,coursename)
其中主键带下划线。表中的元组数 学生表和报名表分别为120和8。最高限额是多少 以及(Student*Enroll)中可以出现的最小元组数, 其中“*”表示自然连接

我在互联网上看到了几种解决方案,如或


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

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

我希望你能理解自然连接到底是什么。你可以复习

如果表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个元组,其中结果表包含2*3=6个元组

此外,在执行自然联接时,如果两个关系之间没有公共属性,则自然联接将表现为笛卡尔积。在这种情况下,很明显,最大元组数是mxn

考虑以下两个表

表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 A | B | C | D ---+---+----+---- 1 | 2 | 4 | 2 1 | 2 | 5 | 2 3 | 2 | 4 | 2 3 | 2 | 5 | 2
希望这能有所帮助。

如果你想知道在R和S的自然连接中可能出现的最大元组数 这两个元组的笛卡尔积应该是8,8。 因为Rollno是Student表中的键,而Rollno是复合键。 学生和注册表之间的关系为1:M。 所以元组的最大数量和多个边相同,即8 若外键为0,则最小元组数为8


所以答案是8,8。

解决方案的第一个链接需要身份验证才能查看答案。@paqogomez说两个集合上的自然联接只返回两个元组之间的公共属性匹配的元组。这里的公共属性是rollno。由于Enroll表中只有8个元组,因此Student和Enroll的自然联接中的最大元组数不能大于8。在这种情况下,注册表中的每个卷号也会出现在学生表中。自然联接中的最小元组数为0,其中两个表之间没有一个公共卷号。“你说得对!
Enroll
可能包含最少1个学生或最多8个学生的数据。自然(内部)join总是会产生8行,因为
roll no
Enroll
中被引用。min=8和max=8是正确的答案,我猜@BhupeshC,只是想知道有多少人在上面得到不同的答案internet@user1765876,作为复合密钥,您不能在
滚动编号中插入
null
,也不能插入任何除了您在
Student
中拥有的数据之外的其他数据。因此,最小值=8,最大值8。这不清楚。您的意思是,两个表的笛卡尔乘积中的行数吗?如果是,您仍然不清楚“笛卡尔乘积”是什么意思“。无论你的意思是什么,它几乎肯定是错误的,因为有公共列,自然连接可以有更少的元组。正如公认的答案所指出的,问题并没有说“学生和注册表之间的关系是1:M”[sic],所以你假设它没有理由。此外,这与“[a]外键存在[s]”是同一回事,但您编写它时就好像它不存在一样。此外,该答案如何添加其他答案中没有的内容以使其“有用”(根据投票箭头鼠标文本)? B | C ----+---- 4 | 2 5 | 2 6 | 2 A | B | C ---+---+---- 1 | 4 | 2 1 | 5 | 2 1 | 6 | 2 3 | 4 | 2 3 | 5 | 2 3 | 6 | 2 A | B ----+---- 1 | 2 3 | 2 C | D ----+---- 4 | 2 5 | 2 A | B | C | D ---+---+----+---- 1 | 2 | 4 | 2 1 | 2 | 5 | 2 3 | 2 | 4 | 2 3 | 2 | 5 | 2