请您帮助我逐步理解并解决以下问题?
架构: 学生(Student_Id,SNAME,DEPARTMENT)
COURSE(Course_Id,CNAME,INSTRUCTOR)
Student_Course(Student_Id,Course_Id,GRADE)
(a)找出雅各教授讲授的每门课程的所有学生的姓名?
答案:1。从“课程”表中选择讲师=“jacob”的元组
2.投射Course_Id
3.学生和学生课程表的自然加入。
4.投影Studen_Id和Course_Id并将其除以结果
来自第2步
(b)找到所有从未参加雅各布教授任何课程的学生的身份证明?
答案: 1.找到通过jacob教授课程的学生 所有三个表和项目Student_Id的自然连接。 2.项目学生_Id来自学生表。 3.找出步骤2中的步骤与步骤1中的差异
(c)查找雅各教授至少修读过一门课程的学生从未学过的所有课程的ID?
答案:1。自然加入所有三个表并选择元组 讲师=“雅各布” 2.项目课程_Id从结果。 3.项目课程_Id从“课程”表中找到差异 在这与第2步之间。
(d)查找所有仅参加雅各布教授课程的学生的身份证明?
答案:1。从课程表中选择Course_Id,其中讲师=“jacob” 2.从student_course表项目Student_id,course_id并找到 与此不同,第一步与此不同。 现在我们得到了那些也参加过课程的学生 没有教“jacob” 3.从Student表中选择student_id,找出它们之间的区别 这和第2步中的那个。
(e)查找满足以下条件的所有课程的ID: (i)他们由雅各布教授和 (ii)所有参加该课程的学生均达到C级或以上
答案:1。从“课程”表中获取jacob教授的课程的course_id。 2.从中获取等级大于“C”的课程的course_id Student_Course表。 3.步骤1和步骤2的结果的交叉点。
这就是我解决问题的方法。还有其他有效的方法吗?或者我的手术有什么不对吗?
答案 0 :(得分:1)
感谢您展示自己的作品。
(a)您找到了合适的学生,但却得到了他们的身份证而不是姓名。
(b)正确,但您不需要在步骤1中包含学生关系。
(c)不会。除了雅各布教授的活跃课程外,你所有的课程都是如此。你需要获得所有不与雅各布教授分享学生的课程。
(d)如果你的意思是反连接而不是步骤2中的设定差异,则更正。
你的方法总的来说是好的,你不要过于复杂,但要注意加入多余的关系。
你的答案不应该用关系代数符号写出来吗?