3

换句话说,是不是真的: r1 ⋈ (r2 - r3) = r1 ⋈ r2 - r1 ⋈ r3

其中 r1 r2 和 r3 是关系

如果不是,例子是什么?

4

2 回答 2

3

是的。

取一个元组 t,具有 JOIN 的所有属性。设 t1 为其“R1”部分。让 t2 成为它的“R2”部分(并且由于 R2-R3 是一个有效的表达式,它也是 t 的“R3”部分)。

元组 t 出现在 R1 JOIN (R2 MINUS R3) 当且仅当:

t1 出现在 R1 中,并且t2 出现在 R2 中,并且t2 没有出现在 R3 中。

元组 t 出现在 (R1 JOIN R2) MINUS (R1 JOIN R3) 当且仅当:

t1 出现在 R1 中,并且t2 出现在 R2 中,并且(不是这种情况)(t1 出现在 R1 中,并且t2 出现在 R3 中)。

由于 t1 必须出现在 R1 中,这减少为:

t1 出现在 R1 中,AND t2 出现在 R2 中,并且 NOT(真AND t2 出现在 R3 中)。
t1 出现在 R1 中,并且t2 出现在 R2 中,并且 NOT(t2 出现在 R3 中)。

与第一种情况比较,观察条件相同。

证明属性的另一种方法是观察比 (R2 MINUS R3) 等价于 (R2 INTERSECT CMP(R3)),其中 CMP(R3) 表示 R3 的补码(关于其类型的全称关系),并且然后应用 JOIN OVER INTERSECTION 的分布性。

于 2012-07-16T21:20:22.703 回答
1

我对所提出的问题没有答案,但即使这是真的,我也不相信等价是对称的。考虑

r1 = (a1, a2)
r2 = (a1, a2, a3)
r3 = (a2, a3)

thenr1 ⋈ r2 - r1 ⋈ r3是可能的,因为每个操作数都是联合兼容的,而r2 - r3不是。

于 2012-07-15T12:37:21.800 回答