让我们成为一个拥有以下关系方案的数据库:R(A,B,D)
和S(A,B)
,同一域中的同名属性以及实例r
和n
s
该计划是什么?u=r÷s
的元组是什么?如何使用r
和s
?
我知道
这让我觉得它只是一个A列的数组,但我不确定知道数组中的结果会是什么。
你能帮我理解你吗?
答案 0 :(得分:2)
关系代数的除法运算符的直观属性就是它与笛卡尔积的逆。例如,如果你有两个关系R和S,那么,如果U是一个被定义为它们的笛卡尔积的关系:
U = R x S
该部门是运营商,以便:
U ÷ R = S
和
U ÷ S = R
因此,您可以将U ÷ R
的结果视为:“U
的投影,乘以R
,生成U
”,以及操作÷
,作为查找与{em>所有 U
元组合并的R
的所有“部分”的操作。
然而,为了有用,我们希望这个操作可以应用于任何一对关系,也就是说,我们想要将不的关系划分为笛卡尔积的结果。为此,正式定义更复杂。
因此,假设我们有两个关系R和S,其属性分别为A和B,它们的除法可以定义为:
R÷S =π AB (R) - π AB ((π AB (R)x S) - R)< / p>
可以这种方式阅读:
π AB (R)x S:对R中不属于S的属性进行项目R,并将此关系与S相乘(笛卡儿积)。这与R的属性A和行的所有可能的S行组合和R的投影;
从前面的结果中减去R中最初的所有元组,即执行(π AB (R)x S) - R.这样我们得到“额外”元组,即笛卡尔积中的元组,不存在于原始关系中。
最后,从原始关系中减去那些额外元组(但是,再次,仅对R中不存在于S中的R的属性执行此操作)。因此,最终的操作是:π AB (R) - π AB (步骤2的结果)。
所以,举个例子,r
对D的投射等于:
(D)
d1
d2
d3
d4
且s
的笛卡尔积为:
(A, B, D)
a1 b1 d1
a1 b1 d2
a1 b1 d3
a1 b1 d4
现在我们可以从这个集合中删除原始关系r
中的元组,即前两个元组和最后一个元组,以便我们获得以下结果:
(A, B, D)
a1 b1 d3
最后,我们可以从原始关系(再次投影在D上)删除之前的元组(投射在D上),也就是说,我们删除:
(D)
d3
从:
(D)
d1
d2
d3
d4
我们得到以下结果,这是该部门的最终结果:
(D)
d1
d2
d4
最后,我们可以通过将结果乘以原始关系s
(仅由元组(a1, b1)
组成)来仔细检查结果:
(A B D)
a1 b1 d1
a1 b1 d2
a1 b1 d4
查看原始关系r
的行,你可以看到这个事实,它应该让你对除法运算符的含义有一个重要的见解:
D
中r
列与(a1, b1)
(s
的唯一元组)一起出现的唯一值d1
,{ {1}}和d2
。