连接属性包含重复元组时的自然连接
Natural join when joining attributes contain duplicate tuples
我正在尝试解决以下问题。
如果我们看一下 39 的解决方案 b) 部分:
下列哪个关系代数语句产生这种关系?
* 表示自然连接。
我对这里的这个小部分有疑问:
(σ_weekdays='MWF'(航班)) * Flight_leg
(σ_weekdays='MWF'(Flight)) returns 元组 DL3 和 BA12
现在自然加入 Flight_leg,但 table 中有两个 DL3。
是结果元组:
- DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
- DL3、Delta、MWF、2、LHR、15:20、TXL、16:03
- BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24
或者,
- DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
- BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24
排除第二个重名的元组?
找到自然连接的定义。它 returns 一组元组值,可以通过组合来自每个参数的一个元组来生成,这些参数对于公共属性共享相同的子元组值。这里设置的公共属性是{flight_number}。来自飞行限制的两个 DL3 元组中的每一个都可以与来自 Flight_leg 的一个 DL3 元组组合,并且来自前者 table 的一个 BA12 元组可以与来自后者的一个 BA12 元组组合 table。所以结果是首选
- DL3, Delta, MWF, 1, JFK, 6:23, LHR, 13:54
- DL3, Delta, MWF, 2, LHR, 15:20, TXL, 16:03
- BA12, British Airways, MWF, 1, LHR, 5:23, JFK, 13:24
(为什么会是别的?)
这里的答案应该是选项e)
实际上,正如我所看到的,这里的“*”代表笛卡尔积,而关于自然连接的事情是它在这里被明确地指定为⋈符号。
回到你的问题。在选项 e) 中,它首先从关系 Flight_leg 中选择 dep_time<11:00 的元组,这些元组的到达机场代码为 5:23 的 LHR 和 6:23 的 JFK。
现在你在这里看到的连接实际上是一个 theta 连接,这给了我们 airport_code=arrival_airport_code 作为 JFK 和 LHR,如果我们从中投影城市,我们只得到伦敦和纽约作为结果。
这里也分享一个link,彻底解开你的疑惑,看看What does the multiply operator do relational algebra?
我还建议您访问维基百科或一些标准的 DBMS 书籍以了解连接及其类型。
我正在尝试解决以下问题。
如果我们看一下 39 的解决方案 b) 部分:
下列哪个关系代数语句产生这种关系?
* 表示自然连接。
我对这里的这个小部分有疑问: (σ_weekdays='MWF'(航班)) * Flight_leg
(σ_weekdays='MWF'(Flight)) returns 元组 DL3 和 BA12 现在自然加入 Flight_leg,但 table 中有两个 DL3。
是结果元组:
- DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
- DL3、Delta、MWF、2、LHR、15:20、TXL、16:03
- BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24
或者,
- DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
- BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24
排除第二个重名的元组?
找到自然连接的定义。它 returns 一组元组值,可以通过组合来自每个参数的一个元组来生成,这些参数对于公共属性共享相同的子元组值。这里设置的公共属性是{flight_number}。来自飞行限制的两个 DL3 元组中的每一个都可以与来自 Flight_leg 的一个 DL3 元组组合,并且来自前者 table 的一个 BA12 元组可以与来自后者的一个 BA12 元组组合 table。所以结果是首选
- DL3, Delta, MWF, 1, JFK, 6:23, LHR, 13:54
- DL3, Delta, MWF, 2, LHR, 15:20, TXL, 16:03
- BA12, British Airways, MWF, 1, LHR, 5:23, JFK, 13:24
(为什么会是别的?)
这里的答案应该是选项e) 实际上,正如我所看到的,这里的“*”代表笛卡尔积,而关于自然连接的事情是它在这里被明确地指定为⋈符号。
回到你的问题。在选项 e) 中,它首先从关系 Flight_leg 中选择 dep_time<11:00 的元组,这些元组的到达机场代码为 5:23 的 LHR 和 6:23 的 JFK。 现在你在这里看到的连接实际上是一个 theta 连接,这给了我们 airport_code=arrival_airport_code 作为 JFK 和 LHR,如果我们从中投影城市,我们只得到伦敦和纽约作为结果。
这里也分享一个link,彻底解开你的疑惑,看看What does the multiply operator do relational algebra?
我还建议您访问维基百科或一些标准的 DBMS 书籍以了解连接及其类型。