关系运算之除法运算(数据库原理重难点)
这是一个比较难的知识点,当时看了好久都没明白,这里,我将尽可能简单地讲,如有误,欢迎指正
在广义笛卡尔积的乘法下,我们将除法看作乘法的逆运算,记住,始终记住这点
我们要求的是R÷S=Q,那么必有Q×S⊆R,不然的话我就可以修改结果中的值,除法将没有意义。如果我们要求除法的结果不为空的话,那它要满足①R中的属性个数>S中的属性个数,②S中的属性⊆R的属性,不然除出来就没东西了
所以,我们的目标就是要找到这样一个元组,让它与S做乘积后的元组都属于R首先,我们缩小范围,结果的值一定是R中有的属性而S中没有的属性,这样笛卡尔乘积才能还原R的子集。还有结果的值不会落在R属性的值域外。好,我们先取R中有的属性而S中没有的属性,并且去重,得到关系T。
但是如果就这样让T与S相乘,会有一些值在R关系之外,这与我们当初定义除法的初衷是相违背,所以,我们得将T中去掉一些值让满足这个条件。现在,我们将开始寻找哪些值不能保留在T中
显然,如果我将S×T与R相比多出来的那部分属性值删去不就好了,这样S×T'⊆R,这就是我们想要的结果!!
我们令W=T×S-R,也就是多出来的元组,然后投影在属性A、B上(关系T的属性),得到V,最后,让T减去这多余的V,就是最终结果。
看到这里的你,再回过头来看书中的步骤,是不是觉得很简单了呢?