Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Relational algebra 从英文描述生成关系代数查询_Relational Algebra - Fatal编程技术网

Relational algebra 从英文描述生成关系代数查询

Relational algebra 从英文描述生成关系代数查询,relational-algebra,Relational Algebra,我正在为即将到来的学校考试做准备 当我复习一些例题时,我被一个特别的问题难住了 Passenger {p_id, p_name, p_nation} with key {p_id} Flight {f_no, f_date, f_orig, f_dest} with key {f_no, f_date} Trip {p_id, f_no, f_date, class} with key {p_id, f_no,f date} and foreign keys [p_id] ⊆ Pas

我正在为即将到来的学校考试做准备

当我复习一些例题时,我被一个特别的问题难住了

Passenger {p_id, p_name, p_nation} with key {p_id}
Flight {f_no, f_date, f_orig, f_dest} with key {f_no, f_date}
Trip {p_id, f_no, f_date, class} with key {p_id, f_no,f date}  
    and foreign keys [p_id] ⊆ Passenger[p_id] and [f_no, f_date] ⊆ Flight[f_no, f_date]
问题是:

考虑一下从成田机场起飞的航班上乘客乘坐的班级。 写在关系代数中:拥有 从成田机场起飞,每班至少一次

到目前为止,我所做的是:

-- rename class to class' in Trip and join with Trip
Q1 = Trip JOIN RENAME class\class' (Trip)
-- select those Q1 tuples where class = class'
Q2 = RESTRICT class = class' (Q2)
-- Project for those who traveled in different classes more than once
Q3 = PROJECT p_id (Q1 - Q2)


Q3将向我显示(如果我做得正确的话)在不同等级中多次旅行的乘客的所有ID

有人能帮我离这一点更远吗

这是我所能得到的。

您计算的第三季度实际容纳了在同一天乘坐同一航班号的多个舱位的乘客。此外,根据限制条件,没有这样的乘客。原因如下:

根据你的代码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
对于第一季度,乘客p_id在d_no上记下f_no,在d_no上记下f_no,在d_no上记下f_no,在d_no上记下f_no,在d_no上记下f_no,在d_no上记下f。(请注意,根据常识,一个人一次只能乘坐一个舱位的航班,如果是“舱位”,那么他们必须在同一日期、不同舱位、使用相同航班号多次飞行。)

Q1-Q2
只是
SELECT class'Q1
。因此,Q3持有在同一日期乘坐同一航班号的不同等级旅客的身份证。但这些人与你对“从成田机场至少乘坐过一次以上每一班飞机的乘客”这一问题的合理解释无关

但无论如何,由于{f_no,f_date}是航班的CK(候选密钥),给定的航班号和日期只有一个航班,因此乘客不能多次乘坐同一航班号和日期。所以Q3是空的

根据英文描述形成关系代数查询

始终通过由属性参数化的语句模板谓词来描述关系(给定一个或查询(子)表达式的值)。这个关系包含了元组,元组构成了一个陈述——命题——这是真实的情况

必须为每个基关系提供谓词。例如:

-- (tuples where) p_id took f_no on f_date in class
Trip
然后,您需要根据基本谓词表达查询(子)表达式谓词,以便可以根据基本关系计算(子)表达式关系:

考虑一下从成田机场起飞的航班上乘客乘坐的班级

r-JOIN-s
的谓词是
谓词-of-r和谓词-of-s
SELECT c r
的谓词是
predicate-of-r和c
。每个关系运算符都有这样的谓词转换。
projectsome-attributes-of-r
的谓词是
对于some-attributes-of-r的谓词-r
RENAME a\a'r
的谓词是
predicate-of-r
,用
a
替换为
a'

要进行查询,请找到与所需谓词等价的谓词,然后用相应的关系表达式替换其部分。看

约束和查询

我们必须知道谓词才能进行查询。约束(包括FDs、CKs、PKs和FKs)是可能出现的每种情况/状态中的真理,用谓词表示。我们只需要在查询时知道约束,因为这些约束是有效的,所以查询的谓词是否只能用基本谓词来表达。例如,给定行程和航班,但无限制,我们无法查询“乘客在成田机场航班上占用的舱位”,即元组中的舱位,其中:

p_id took f_no on f_date in class from f_orig to f_dest
我们能得到的最近的航班是(
Trip-JOIN-Flight
):

但这并不一定告诉我们在什么航班上使用了什么级别。但是如果{f_no,f_date}在飞行中是唯一的,这意味着{f_no,f_date}是飞行的CK,那么这两个谓词意味着相同的事情(即每个元组和情况都有相同的真值)


另一方面,由于我们可以在给定CK约束的情况下表示该查询,因此我们也不需要被告知{f_no,f_date}是从Trip到Flight的FK。FK说,如果某位乘客在某个级别的f_-date乘坐f_-no,那么f_-no会在f_-date上从某个起点飞到某个目的地,{f_-no,f_-date}是一个航班。乘客{f_no,f_date}是航班{f_no,f_date}。但是,无论FK的第一个连接是否也成立,或者任何其他约束是否成立,查询都会返回满足其谓词的元组。

Google'unicode relational projection'等,以获取所需的字符作为文本。Aso“unicode数学符号”。Q1的表达式没有意义。JOIN的右操作数没有提到正在进行重命名的关系。另外,有很多相关的代数变体,所以请给你的参考。(到目前为止,我们只知道您使用过的运营商。)PS请参见[此](.您的Q3评论“多次乘坐不同等级的乘客”不清楚。后来您说Q3是“多次乘坐不同等级的乘客”,但也不清楚。请编辑以实际描述您想要的元组。(如果你不能用自然语言表达清楚,你怎么能希望用代数表达清楚呢?)。
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