gpt4 book ai didi

sql - 关系代数 - 笛卡尔积与自然连接?

转载 作者:行者123 更新时间:2023-12-03 02:12:20 25 4
gpt4 key购买 nike

我正在准备考试,但未能找到一个可靠的标准来确定是否使用笛卡尔积 x 或者是否使用自然连接 |X| 将被使用。

我想出了一个粗略的指南:

“如果您需要投影与要连接的表中的属性同名的属性,则必须使用 x 并声明要投影的表名称: tableA.colname1 = tableB.colname1"

然而,这并不遵循我笔记中的一些解决方案,而且我的讲师似乎将 x 与上述约定或 |x| 互换使用。

是否有人拥有可以遵循的规则来定义其中一种的使用?

<小时/>

以此架构为例(仅与为简洁起见而引用的问题相关的架构):

takes(ID, course_id, sec_id, semester, year, grade)
student(ID, name, dept_name, tot_cred)

问)查找参加过 2011 年 Spring 或 2011 年秋季授课类(class)的所有学生的姓名。

我的回答尝试:

π name(σ semester="Spring" ^ year=2011(takes ⋈ student)) ∪ π name(σ semester="Autumn" ^ year=2011(takes ⋈ student))

实际答案:

π name(σ semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ∪ π name(σ semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))

谁能给出一个理由吗?

在我看来,自然连接会处理 takes.ID=student.ID

最佳答案

据我所知,自然连接是一个投影的、过滤的笛卡尔积:

  • 您采用笛卡尔积,然后
  • 选择它,以便同名列中的值具有相同的值,并且
  • 对其进行投影,以便所有列都有不同的名称。

在此假设下,您的答案与实际答案同构。

要看到这一点,您可能需要将自然连接扩展为上述运算符序列,并使用关系代数定律将它们 float 。您将看到投影由于投影到 name 而消失,并且选择标准与上面的选择融合。即使您从未改变过自己答案的含义,您最终也会得到与实际答案完全相同的树!

<小时/>

我可以想到你的讲师互换使用这些概念的一个原因:你的讲师希望你理解这些概念可以可以互换使用,因为“自然连接只是一种捷径”(尽管这是有争议的)。

关于sql - 关系代数 - 笛卡尔积与自然连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14127306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com