【发布时间】:2018-09-02 06:25:30
【问题描述】:
我知道这个问题已经被问到here。 但是那里没有正确回答。
Q) 考虑以下关系数据库方案:
课程(Cno.name)
PRE-REQ(Cno, pre-Cno)
已完成(student_no, Cno)
COURSES 提供所有可用课程的编号和名称。
PRE-REQ 提供有关哪些课程是给定课程的先决条件的信息。
COMPLETED 表示学生已经完成了哪些课程
使用关系代数表达以下内容:
列出学生编号为 2310 的学生所修读的所有课程 完成所有先决条件。
给出here的答案:
S ← π Cno (σ student_no=2310 (COMPLETED))
RESULT ← ((ρ (Course,Cno) (PRE−REQ))÷S)
但我发现了其中的一个缺陷。 假设
PRE-REQ COMPLETED
Cno Pre-Cno Student_no Cno
C1 C3 2310 C3
C2 C4 2310 C4
所需的结果应该是 C1、C2,但我的查询将返回一个空关系,因为 C1 没有 C4 作为其先决课程,同样,C2 也没有 C3 作为其先决课程。
S RESULT
Cno Course Cno
C3
C4
在答案之一here 中给出的另一种解决方案是使用 SQL 是-
SELECT Pre-Req.Cno
FROM Completed, Pre-Req
WHERE student_no = '2310'
GROUP BY Pre-req.Cno
HAVING pre-Cno IN (
SELECT C.cno
FROM Completed AS C
WHERE C.student_no = '2310';
)
有没有其他可能的写法是关系代数表达式?
【问题讨论】:
-
请不要重复。根据许多 cmets 的问题编辑原始文件。如果你工作的一部分,问一个新问题,然后问一个关于其余部分的问题。但是请解释为什么您编码了您所做的事情,您认为正确和相关的内容,不正确的内容等(“您的”尝试的图像来自哪里?)您已经忽略了那里的 cmets 重新解释您的工作并给出您的代数。请阅读并根据点击谷歌搜索“stackexchange 作业”采取行动。 (还有“在线运行关系代数”。)另外(因为 RA 是代码)minimal reproducible example--通过给出有效的最大部分来证明“最小”。
-
你最后一句话不清楚。使用足够多的句子来清楚地表达你的意思。另请解释为什么您的“因为”如此 - 这并不明显。 “空表”是什么意思——你的意思是空表吗?
-
我已经阅读了该问题下方的所有 cmets,但无法找到我要查找的内容..
-
无论如何,谢谢。下次我会注意的:)
-
阅读我的 cmets。您没有在问题中提出其他问题中所说的问题应该存在的东西。此外,没有证据表明您试图找到该问题的解决方案或理解您提供的解决方案。重新链接/图像,因为您提供了文本,所以有人会将链接内联。但对于未来:请use text, not images/links, for text (including code, tables & ERDs)。使用图片只是为了方便补充文本和/或无法在文本中给出的内容。
标签: database relational-algebra