如何在关系代数查询中使用变量?
How can I use a variable in a relational algebra query?
我有以下table。
我想在查询中找到以下内容:
保留 ONLY Brown 保留的船只的水手姓名(意味着只有 Brown 和 Blake 应该出现,因为他们是唯一单独保留 Boat 1 和 Boat 的人4 在预订 table).
我已经尝试了以下方法,甚至使用了 relational algebra calculator 但是我被卡住了。我能够到达 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
这是解决方案的草图:
让reserved-by-brown
table由布朗保留的船的BN组成;这可以通过加入三个 tables 来找到,对水手姓名有限制,对 BN 有投影。
令sails
table由tablereserved-by-brown
划分在SN和BN上的投影得到Reservation。这将产生 至少 保留了布朗保留的所有船的水手的 SN。
令non-brown
得到Boat在BN上的投影与reserved-by-brown
的差值table:这包含boat的所有BN非 由 Brown 保留。
让non-brown-reservation
在non-brown
和reservation
之间加入属性BN。这包含所有的预订,不包括布朗预订的船只。
最后,计算帆与前一个table non-brown-reservation
在SN上的投影之间的差异。这将包含所需的结果。
我有以下table。
我想在查询中找到以下内容:
保留 ONLY Brown 保留的船只的水手姓名(意味着只有 Brown 和 Blake 应该出现,因为他们是唯一单独保留 Boat 1 和 Boat 的人4 在预订 table).
我已经尝试了以下方法,甚至使用了 relational algebra calculator 但是我被卡住了。我能够到达 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
这是解决方案的草图:
让
reserved-by-brown
table由布朗保留的船的BN组成;这可以通过加入三个 tables 来找到,对水手姓名有限制,对 BN 有投影。令
sails
table由tablereserved-by-brown
划分在SN和BN上的投影得到Reservation。这将产生 至少 保留了布朗保留的所有船的水手的 SN。令
non-brown
得到Boat在BN上的投影与reserved-by-brown
的差值table:这包含boat的所有BN非 由 Brown 保留。让
non-brown-reservation
在non-brown
和reservation
之间加入属性BN。这包含所有的预订,不包括布朗预订的船只。最后,计算帆与前一个table
non-brown-reservation
在SN上的投影之间的差异。这将包含所需的结果。