这就是我得到的。
你实际计算的Q3保持在谁多个类所乘的同一航班号上当天乘客。而且,根据约束条件,并非任何这样的乘客。这里的原因:
根据你的代码Q1被
/* (tuples where)
p_id took f_no on f_date in class
AND p_id took f_no on f_date in class'
*/
Trip JOIN RENAME class\class' Trip
对于Q1,乘客的p_id在了f_no上d_no在类(对于航班号和日期)类'。 (请注意,常规情况下,一个人只能一次飞行一班,如果班 <>班'那么他们必须在相同的日期使用相同的航班号飞行多次, )
Q1 - Q2
只是SELECT class <> class' Q1
。因此,第三季度持有乘坐不同班级,并且在同一日期具有相同航班号的乘客的ID。为了对您的总体查询做出合理的解释,“这些班级中每个班级的成田飞机乘客至少一次”,这些人是不相关的。
但无论如何,既然{f_no,f_date}是飞行的CK(候选键),只有一个飞行对于给定的航班号和日期,所以没有乘客已经飞到同一航班号&日期不止一次。所以Q3无论如何都是空的。
形成从英语描述一个关系代数查询
总是表征关系 - 给定的一个或一个查询(子)的表达式的值 - 通过一个语句模板 - - 谓语按属性--parameterized。的关系认为,使之成为一个statement-- 命题凹口 - 是的情况真元组。
您必须被赋予每个基本关系断言:
-- (tuples where) p_id took f_no on f_date in class
Trip
然后,你需要表达你的查询(子)表达的基础的人而言谓词以便该关联关系,可以在计算基地关系的条款:
考虑乘客从成田航班上占用的班级。
/* (tuples where)
for some p_id, f_no, f_date, f_orig & f_dest,
p_id took f_no on f_date in class
AND f_no flew on f_date from f_orig to f_dest
AND f_from = 'Narita'
*/
PROJECT class SELECT f_dest = 'Narita' (Trip JOIN Flight)
的r JOIN s
谓词是predicate-of-r AND predicate-of-s
。 SELECT c r
的谓词是predicate-of-r AND c
。每个关系运算符都有这样的谓词转换。的PROJECT some-attributes-of-r r
谓词是FOR SOME other-attributes-of-r predicate-of-r
。的RENAME a\a' r
谓词为predicate-of-r
与(的某些事件)a
通过a'
取代。
进行查询,找到一些谓词等同于您所需的谓词,然后通过相应的关系式更换其部件。见this。
约束&查询
我们必须知道,以查询谓词。约束条件(包括的FD,CKS,和的PK FKS)是可能出现的各种情况/状态的真理,在谓词表示。当查询查询的谓词是否只能用基谓词表达时,我们只需要知道约束,因为这些约束就成立了。例如,给乘客&飞行,但没有约束我们不能为“乘客已经从成田机场航班占领班”查询:
p_id took f_no on f_date in class from f_orig to f_dest
我们可以得到最接近的是:
p_id took f_no on f_date in class
AND f_no flew on f_date from f_orig to f_dest
这没有告诉我们什么班级在什么航班上使用过。但是如果{f_no,f_date}在Flight中是唯一的,{f_no,f_date}是Flight的CK,那么这两个谓词表示相同的事物(即对于每个元组&情况都具有相同的真值)。
另一方面,我们不需要需要告知{f_no,f_date}是Passenger to Flight的FK。因为我们可以使用基地表达查询。当这是如此的约束是不需要的。该FK说,如果一些乘客在一些班级采取了f_no上f_date那么我们就知道,以及给我们约束f_no立马就f_date一些产地到某个目的地的人,即乘客{f_no ,f_date}是一个航班{f_no,f_date}。哪些与CK约束形成FK约束。但是无论FK是否拥有查询都会返回满足其谓词的元组。
谷歌'unicode关系投影'等等,以获得您需要的字符作为文本。阿索'unicode数学符号'。 – philipxy
你对Q1的表达没有任何意义。 JOIN的右操作数没有提及重命名发生的关系。此外,还有很多关于代数的变体,所以请给你一个参考。 (到目前为止,我们只知道你已经使用过的操作员)。PS请参阅[this](http://stackoverflow.com/a/41800639/3404097)。 – philipxy
你的Q3评论“那些在不同班级[es]不止一次“是不清楚的,后来你说Q3是”不同班级乘客不止一次出行“的乘客,但这并不明确,请编辑实际描述你想要的元组(如果你不能清晰的自然语言,你希望在代数中清楚吗?)为什么你认为你的Q3代码给出了这些ID?PS我尽我所能地编辑了你的语言和格式,注意我添加了(Trip)到您的代码的文本版本。 – philipxy