【发布时间】:2012-12-17 03:07:48
【问题描述】:
我正在准备考试,但未能找到可靠的标准来确定是使用笛卡尔积 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)
Q) 找出参加过 2011 年春季或 2011 年秋季课程的所有学生的姓名。
我的回答尝试:
π 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))
谁能说明原因?
在我看来,Natural Join 会处理takes.ID=student.ID?
【问题讨论】:
-
现实世界的数据库几乎从使用笛卡尔积。
-
乔尔,我不同意。我经常发现笛卡尔积在“现实世界”中很有用。
-
@sqlvogel 我也用过……但很少见。
标签: sql database-design relational relation relational-algebra