如果我删除了黄色部分,我还能想出正确的答案吗?它甚至是必要的吗?
2 回答
为了知道是否可以省略它,您必须查看与表达式及其子表达式相对应的谓词是什么。
例如,最里面的限制说(我推测是因为这个例子很熟悉)“供应商 S# 供应 P# 的数量为 QUANTITY AND P# = 3”。或更短的“供应商 S# 供应第 3 部分的数量 QUANTITY”。
然后对 S# 的预测说“存在一些数量 q,使得供应商 S# 供应该数量的第 3 部分”。
与 S 的 JOIN 然后说“供应商 S# 被命名为 SNAME,[熟悉的部分被剪断] 并且存在一些数量 q,使得供应商 S# 供应该数量的部分 3”。或更短的“供应商 S# 被命名为 SNAME,[熟悉的部分被剪断] 并以一定数量供应第 3 部分”。
SNAME 上的投影然后说“存在一些 S#、CITY、STATUS,使得供应商 S# 被命名为 SNAME,[熟悉的部分被剪断]并提供一定数量的第 3 部分”。
对于省略“内部投影”的情况,您也可以这样做,然后尝试证明获得的谓词必须与这个等价。如果可以,您知道包含该投影是不必要的。[如果你不能,你必须更加努力:-)]
假设这不是家庭作业:
我猜|X|
是自然连接并#
表示主键属性。
就查询结果的正确性(有效性)而言,突出显示的投影S#
不是必需的。
但是,它可能会提高效率:在加入之前尽可能早地删除重复项目。这避免了首先产生重复的 natjoined 元组的不必要的努力,
sname
然后投影必须删除这些元组。