连接属性包含重复元组时的自然连接

Natural join when joining attributes contain duplicate tuples

我正在尝试解决以下问题。

如果我们看一下 39 的解决方案 b) 部分:

下列哪个关系代数语句产生这种关系?

* 表示自然连接。

我对这里的这个小部分有疑问: (σ_weekdays='MWF'(航班)) * Flight_leg

(σ_weekdays='MWF'(Flight)) returns 元组 DL3 和 BA12 现在自然加入 Flight_leg,但 table 中有两个 DL3。

是结果元组:

  1. DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
  2. DL3、Delta、MWF、2、LHR、15:20、TXL、16:03
  3. BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24

或者,

  1. DL3、三角洲、MWF、1、肯尼迪国际机场、6:23、LHR、13:54
  2. BA12、英国航空公司、MWF、1、LHR、5:23、肯尼迪国际机场、13:24

排除第二个重名的元组?

找到自然连接的定义。它 returns 一组元组值,可以通过组合来自每个参数的一个元组来生成,这些参数对于公共属性共享相同的子元组值。这里设置的公共属性是{flight_number}。来自飞行限制的两个 DL3 元组中的每一个都可以与来自 Flight_leg 的一个 DL3 元组组合,并且来自前者 table 的一个 BA12 元组可以与来自后者的一个 BA12 元组组合 table。所以结果是首选

  1. DL3, Delta, MWF, 1, JFK, 6:23, LHR, 13:54
  2. DL3, Delta, MWF, 2, LHR, 15:20, TXL, 16:03
  3. 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 书籍以了解连接及其类型。