如何在关系代数查询中使用变量?

时间:2019-02-05 06:12:23

标签: relational-database relational-algebra

我有以下https://en.wikipedia.org/wiki/Universally_unique_identifier#Format

我想在查询中找到以下内容:

保留 ONLY (仅保留Brown和Blake的船只,应显示的水手的水手姓名,因为它们是在保留表中唯一仅保留1号和4号船的船员) )。

我尝试了以下操作,甚至都使用过table,但是我被卡住了。我可以说到表中的所有行都包括正确的船,但是我不知道如何排除带有额外船的条目。所有帮助将不胜感激。谢谢。

X = π SN, BN (Reservation) ⨝ π SN, Name (Sailer)
Y = π SN, BN (Reservation) ⨝ π BN (Boat)
Z = X ⨝ Y

CONTAINING = π Name, SN, BN (Z) / π BN (σ Name = 'Brown' (Z)) ⨝ Z
LAST = CONTAINING - π SN, BN, Name (σ Name = 'Brown' (Z))
RESERV = γ Name; count(Name)->NUM_RESERV (CONTAINING)
π Name (σ NUM_RESERV = NUM_RESERV RESERV)

这将产生:

Sailer.Name:
Smith
Blake
Brown

1 个答案:

答案 0 :(得分:1)

这是解决方案的草图:

  1. reserved-by-brown表由布朗保留的船的BN组成;可以通过将三个表结合在一起,以限制水手姓名和BN投影来找到它。

  2. sails的表通过保留的SN和BN上的投影除以表reserved-by-brown获得。这将产生至少 保留了Brown保留的所有船只的水手的SN。

  3. non-brown所得的表与Boat在BN和reserved-by-brown上的投影的差异:该表包含Brown保留的船 non 的所有BN。

  4. 在属性BN上non-brown-reservationnon-brown之间建立联接。其中包含所有保留,不包括布朗保留的船只。

  5. 最后,计算帆和上一张桌子reservation的SN投影之间的差。这将包含所需的结果。