如何从模式中编写关系代数?

时间:2015-09-27 17:27:23

标签: database-design relational-database database-schema relational-algebra

请您帮助我逐步理解并解决以下问题?

架构: 学生(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的结果的交叉点。

这就是我解决问题的方法。还有其他有效的方法吗?或者我的手术有什么不对吗?

1 个答案:

答案 0 :(得分:1)

感谢您展示自己的作品。

(a)您找到了合适的学生,但却得到了他们的身份证而不是姓名。

(b)正确,但您不需要在步骤1中包含学生关系。

(c)不会。除了雅各布教授的活跃课程外,你所有的课程都是如此。你需要获得所有不与雅各布教授分享学生的课程。

(d)如果你的意思是反连接而不是步骤2中的设定差异,则更正。

(e)不会。您将获得雅各布教授的所有课程,其中任何学生的C级或以上。您需要获得所有学生达到C或以上成绩的学生。

你的方法总的来说是好的,你不要过于复杂,但要注意加入多余的关系。

你的答案不应该用关系代数符号写出来吗?