考虑以下关系数据库方案:
COURSES (Cno,name)
PRE-REQ(Cno, pre-Cno)
COMPLETED (student_no, Cno)
COURSES提供所有可用课程的编号和名称。
PRE-REQ提供有关哪些课程是特定课程的先决条件的信息。
COMPLETED表示学生已完成哪些课程
使用关系代数表达以下内容:
列出student_no = 2310的学生已完成所有先决条件的所有课程。
问题可以通过SQL查询解决,但无法导出等效的关系代数。
答案 0 :(得分:0)
以下是RA的TUTORIAL D变体中的答案:
WITH { COMPL_2310 := (COMPLETED WHERE student_no = '2310')
{ Cno } RENAME { Cno AS pre-Cno }
}
COURSES WHERE ( ( RELATION{ TUPLE{*} } JOIN PRE_REQ ){ pre-Cno }
⊆
COMPL_2310
)
(与Date& Darwen的教科书相比,它使用了最近引入的一些语法糖和替代语法。)
答案 1 :(得分:0)
这可能是正确的答案
Π Cno (PRE-REQ) - Π Cno (PRE-REQ - (已完成⋈ COMPLETED.Cno = pre-Cno ^ student_no = 2310 < / sub> PRE-REQ))