我感兴趣的是以下等价是否成立:
NaturalJoin (R,S-T) equivalence Difference(NaturalJoin(R,S),NaturalJoin(R,T))
如果是这样,你能给出等价的理由吗?如果您知道哪种查询在运行时意义上可能更优,那将非常有用。
P.S。我想使用LATEX但是对于stackoverflow来说相当新,我似乎无法理解如何在这里使用它 - math.stackexchange中的标记只是\[...\]
。
答案 0 :(得分:1)
NaturalJoin (R,S-T) equivalence Difference(NaturalJoin(R,S),NaturalJoin(R,T))
处理此问题的一般方法是用定义替换操作员调用。
这是一个概述,假设关系表达式与它们所持有的元组之间存在某些等价关系。实际上,人们需要使用等价来证明一个人的查询返回一个被要求获得的元组,但这通常不会被解释。 (一个人通过大量的例子和手工学习。)
S
& T
具有相同的属性集
X
将行(...)
保存在X(...)
,即(...) IN X
NATURALJOIN(X,Y)
保留X(...) AND Y(...)
行。{。}
DIFFERENCE(X,Y)
包含X(...) AND NOT Y(...)
行。
左侧包含以下行:
R(...) AND (S(...) AND NOT T(...))
R(...) AND S(...) AND NOT T(...)
右边包含以下行:
(R(...) AND S(...)) AND NOT (R(...) AND T(...))
(R(...) AND S(...)) AND (NOT R(...) OR NOT T(...))
((R(...) AND S(...)) AND NOT R(...)) OR ((R(...) AND S(...)) AND NOT T(...))
(R(...) AND S(...) AND NOT R(...)) OR (R(...) AND S(...) AND NOT T(...))
R(...) AND S(...) AND NOT T(...)
所以他们是等同的。
您可以将此X(...)
替换为x IN X
并使用适当的量化(FORALL
& FORSOME
/ EXISTS
)并将其设置为理解({
variable
|
wff
}
)。
在推理中使用自然连接& SQL请参阅this answer及其链接。
如果您知道哪种查询在运行时意义上可能更优,那将非常有用。
这取决于您的DMBS及其查询实现/优化。没有执行模型,成本/收益函数和该函数的输入参数,没有“最优”。此外,“最优”是混乱的 - 关系中的微小变化&物理DDL,数据库内容和统计,查询DML,查询&更新模式和DBMS实现可以给出完全不同的权衡。