关系代数与关系演算:求无对应操作员的目的地名称的关系代数表达式
修正你的关系代数表达式:找出无对应操作员的目的地
嘿,你的原表达式逻辑有点跑偏了——T1 ← ΠopCode(Operator) - ΠopCode(Journey)得到的是没有任何行程的操作员编号,这和我们要找的「没有对应操作员的目的地」完全不搭边,毕竟Destination表和opCode没有直接关联,硬把T1和Destination连起来根本出不来正确结果。
咱们重新理清楚思路:要找「没有对应操作员的目的地」,本质是找那些没有被任何有效操作员负责的行程覆盖的目的地(包括完全没有行程的目的地,以及有行程但所有行程的操作员都不存在的目的地)。正确的表达式可以分步骤写:
第一步:筛选有有效操作员的行程对应的目的地
先把Journey和Operator做自然连接,只保留存在对应操作员的合法行程,再提取这些行程的目的地编号:
T1 ← ΠdestinationCode(Journey ⋈ Operator)
第二步:找出无对应操作员的目的地编号
用Destination里的所有目的地编号,减去第一步得到的「有操作员覆盖的目的地编号」,剩下的就是我们要找的目标编号:
T2 ← ΠdestinationCode(Destination) - T1
第三步:提取目的地名称
把T2和Destination做自然连接,最后投影出目的地名称就行:
ΠdestinationName(T2 ⋈ Destination)
如果嫌分步骤麻烦,也可以合并成一个完整的表达式:
ΠdestinationName( (ΠdestinationCode(Destination) - ΠdestinationCode(Journey ⋈ Operator)) ⋈ Destination )
简单解释下:这个表达式先拿到所有合法行程对应的目的地,再用总目的地集合减去它,最后关联回Destination表拿到名称,完美覆盖了所有「没有对应操作员的目的地」场景。
内容的提问来源于stack exchange,提问作者bradley Lucas
相关产品推荐
相关产品推荐

