使用关系代数查找元素的适当子集

Finding proper subset of elements using relational algebra

我有一个 table 由学生和考试列组成的考试,我需要找到所有参加了学生 A 参加的考试的适当子集的学生。

数据样本可以是:

student exam
A       1
A       2
B       1
B       3
C       1
C       2
D       1

结果应该是

student
D       

因为只有 D 参加了 A 参加的考试的适当子集,所以 B 不在结果中,因为他参加了 A 没有参加的考试

到目前为止我想到的是:

参加学生 A 参加的所有考试

examsA ← π exam (σ student='A' (Exams))

将考试关系除以学生 A 参加的考试

studentsNoGood ← Exams ÷ examsA

现在我有所有参加完全相同考试的学生和参加更多考试的学生, 通过减法,我只找到那些参加考试较少的人和那些没有参加学生 'A' 考试子集的人。

lessExamsOrNotSubset ← Exams - studentNoGood

然后我陷入了如何区分考试较少的人和参加不相关考试的人的问题


'a proper subset' 我的意思是对于 2 个集合 D 和 E,D 是 E 的真子集当且仅当 D 包含在 E 中并且 D 不等于 E,所以 E 中有一个元素不在 D 中。

我正在使用《数据库系统基础知识》(Elmasri,Navathe)一书中的关系代数。第 239 页

要找到参加考试与 A 无关的学生,首先要找到那些考试:

R1 ← π exam (Exams) - examsA 

然后在这组中找到至少参加过一次考试的学生:

studentsUnrelated ← π student (Exams ⨝(Exams.exam = R1.exam) R1)

然后你也可以删除这些学生,以找到那些只参加了 A 考试的适当子集的学生。