在我断言的测试问题中
R ∩ (R ∩ S) = R ∩ S
如果这是集合论,我会争论
R∩(R∩S)
= (R ∩ R) ∩ S 通过结合性
= (R) ∩ S 由幂等性
= R ∩ S
使用关系代数,我们是在袋子上进行操作。 我可以对袋子采取相同的步骤(幂等性似乎微不足道,http://comet.lehman.cuny.edu/stjohn/teaching/db/ullmanSlidesF00/slides7.pdf的第3页建议关联性),但我无法形成正式证明。
如何证明(或通过反例或其他方式反驳)关系代数中交集的结合性和幂等性?
关系模型是在集合上正式定义的,因此关系代数仅在集合上定义。但自从关系数据库将模型扩展为包含多重集或包以来,关系代数也已类似地扩展到多重集,并且几乎所有有关数据库的现代书籍都描述了这种扩展。
特别地,使用符号 Opb 来表示算子 Op 在多重集上的变体,我们可以定义算子 ∩b、∪b 和 −b 如下:
R ∩b S:如果一个元素 t 在 R 中出现 n 次,在 S 中出现 m 次,那么它在 R ∩b S 中出现 min(n,m) 次;
R ∪b S:如果一个元素 t 在 R 中出现 n 次,在 S 中出现 m 次,那么它在 R ∪b S 中出现 n+m 次;
R −b S:如果元素 t 在 R 中出现 n 次,在 S 中出现 m 次,则它在 R −b S 中出现 max(0,n-m) 次。
您想表明:
R ∩b S = R ∩b (R ∩b S)
正如您的正确推导所示,如果我们可以证明运算符 ∩b 的结合性和幂等性,则可以证明这一点。
幂等性:
R ∩b R = R
在这种情况下,由于每个元素在两个操作数中出现的次数相同,即 m = n,所以它在结果中出现 min(n, n) = n 次,即它出现R 的次数相同。
关联性:
(R ∩b S) ∩b T = R ∩b (S ∩b T)
假设某个元素t在R中出现n次,在S中出现m次,在T中出现k次,我们有:
(R ∩b S) ∩b T
它将在结果中出现 min(min(n,m), k) 次,这等于 min(n,m,k)。另一方面,在:
R∩b(S∩bT)
它将在结果中出现 min(n, min(m,k)) 次,但这又等于 min(n,m,k)。
所以这意味着它在两个结果中出现的次数相同,因此两个结果相等。
正如 philipxy 已经评论的那样,关系是集合,因此集合论适用。 下面提供的链接为您提供了变换等价列表,并且其中列出了并集和交集的关联属性。
http://www.postgresql.org/message-id/attachment/32495/equivalenceRules.pdf
可能会提出这样的问题:有多少关系代数定理在 SQL 数据库领域(而不是关系代数领域)可证明是正确的。 这是有问题的,因为任何给定的实现都可能存在错误,甚至 SQL 模型中也可能存在缺陷。 我倾向于盲目地假设关系代数的结果会延续到现实世界中,但一些深刻的思想家在这方面发出了警告。