关系模型是在集合上正式定义的,因此关系代数仅在集合上定义。但是由于关系数据库扩展了模型以包含多集或包,关系代数也类似地扩展到了多集,几乎所有关于数据库的现代书籍都描述了这种扩展。
特别是,使用符号 Op b表示运算符 Op 在多重集上的变体,我们可以定义运算符 ∩<sup>b、∪<sup>b 和 -<sup>b 如下:
R ∩<sup>b S:如果一个元素t在 R 中出现n次,在 S 中出现m次,则它在 R 中出现min(n,m)次 ∩<sup>b S;
R ∪<sup>b S:如果一个元素t在 R 中出现n次,在 S 中出现m次,则它在 R ∪<sup>b S 中出现n+m次;
R -<sup>b S:如果元素t在 R 中出现n次,在 S 中出现m次,则它在 R -<sup>b S 中出现max(0,nm)次。
你想证明:
R ∩<sup>b S = R ∩<sup>b (R ∩<sup>b S)
正如您的正确推导所示,如果我们可以证明运算符 ∩<sup>b 的关联性和幂等性,则可以证明这一点。
幂等性:
R ∩<sup>b R = R
在这种情况下,由于每个元素在两个操作数中出现的次数相同,即m = n,我们有它在结果中出现min(n, n) = n次,即出现相同的次数的R。
关联性:
(R ∩<sup>b S) ∩<sup>b T = R ∩<sup>b (S ∩<sup>b T)
假设某个元素t在 R 中出现n次,在 S中出现m次,在 T 中出现k次,我们有:
(R ∩<sup>b S) ∩<sup>b T
它将在结果中出现min(min(n,m), k)次,这等于min(n,m,k)。另一方面,在:
R ∩<sup>b (S ∩<sup>b T)
它会在结果中出现min(n, min(m,k))次,但这又等于min(n,m,k)。
所以这意味着它在两个结果中出现的次数相同,所以两个结果是相等的。