关系代数 - 笛卡儿积与自然联合?

Myl*_*ray 7 sql database-design relational relational-algebra relation

我正在攻读考试,但我没有找到一个可靠的标准来确定是否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)
Run Code Online (Sandbox Code Playgroud)

Q)找到参加2011年春季或2011年秋季课程的所有学生的姓名.

我的回答是:

? name(? semester="Spring" ^ year=2011(takes ? student)) ? ? name(? semester="Autumn" ^ year=2011(takes ? student))
Run Code Online (Sandbox Code Playgroud)

实际答案:

? name(? semester="Spring" ^ year=2011 ^ takes.ID=student.ID(takes x student)) ? ? name(? semester="Autumn" ^ year=2011 ^ takes.ID=student.ID(takes x student))
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供原因吗?

在我看来,自然加入将照顾takes.ID=student.ID

小智 7

根据我的理解,自然连接是一个预测的,经过滤波的笛卡尔积:

  • 那你拿笛卡尔积
  • 选择它,以便同名列中的值具有相同的值,并且
  • 对它进行投影,以便所有列都具有不同的名称.

在这种假设下,你的答案与实际答案是同构的.

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


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