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
,并且选择标准与上面的选择融合.即使您从未改变过自己答案的含义,您最终会得到与实际答案完全相同的树!
我可以想到你的讲师可以互换地使用这些概念的一个原因:你的讲师希望你理解这些概念可以互换使用,因为"自然连接只是一个捷径"(虽然这是有争议的).