除法运算的定义:除法运算 ÷ \div ÷ 是同时从关系的水平和垂直方向进行运算。

给定关系 R ( X , Y ) R(X,Y) R(X,Y) S ( Y , Z ) S(Y,Z) S(Y,Z) X , Y , Z X,Y,Z X,Y,Z 为属性组。 R ÷ S R \div S R÷S 为:元组在 X X X 上的分量值 x x x 的 像集 Y x Y_x Yx包含 关系 S S S 在属性组 Y Y Y 上投影 π y ( S ) \pi_y(S) πy(S)集合。形式定义:
R ÷ S = {   t n [ X ] ∣ t n ∈ R ∧ π y ( S ) ⊆ Y x } R \div S = \{\ t_n[X]\quad |\quad t_n \in R \wedge \pi_y(S) \subseteq Y_x\} R÷S={ tn[X]tnRπy(S)Yx}

这个概念非常抽象,我反正是没有听懂的。所以,这里通过一个实例来说明除法运算的求解过程:

设有关系 R 、 S R、S RS 如图所示,求 R ÷ S R÷S R÷S 的结果:
在这里插入图片描述
求解步骤过程:

  1. 第一步:找出被除关系 R R R 和关系 S S S相同的属性列,即 Y Y Y 属性。关系 S S S 中对 Y Y Y 做投影(即将 Y Y Y 无重复的列举出);所得结果如下:

  2. 第二步:找出被除关系 R R R 中与 S S S不相同的属性列,即 X X X 属性。关系 R R R 中对 X X X 做投影(即将 X X X 无重复的列举出);所得结果如下:
    在这里插入图片描述

  3. 第三步:求关系 R R R X X X 属性对应的 像集 Y Y Y。根据关系 R R R 的记录,可以得到与 X 1 X_1 X1 值有关的记录,如图3所示,与 X 2 X_2 X2 有关的记录,如图4所示:
    在这里插入图片描述

  4. 第四步:判断包含关系 R ÷ S R÷S R÷S 其实就是判断关系 R R R X X X 各个值 x x x 的像集 Y x Y_x Yx 是否包含关系 S S S 中属性 Y Y Y 的所有值。对比即可发现:

    • X 1 X_1 X1 的像集只有 Y 1 Y_1 Y1,不能包含关系 S S S 中属性 Y Y Y 的所有值,所以排除掉 X 1 X_1 X1
    • X 2 X_2 X2 的像集包含了关系 S S S 中属性 Y Y Y 的所有值,所以 R ÷ S R÷S R÷S 的最终结果就是 X 2 X_2 X2

也许现在有点明白除法运算是如何操作的了,下面来引申一下,除法运算可以解决什么问题呢

e . g . e.g. e.g. 设有关系 R , S R,S RS 以及 R S RS RS,如图所示,求 R S ÷ S RS÷S RS÷S 的结果:
在这里插入图片描述
重复一遍上面的求解过程:

  1. 找到 关系 R S RS RS S S S 中相同的属性列 课 程 名 课程名 ,即为 Y Y Y 属性,对其投影,得到 π 课 程 名 ( R S ) = { 语 文 , 数 学 } \pi_{课程名}(RS) = \{语文, 数学\} π(RS)={,}
  2. 找到关系 R S RS RS 中和 S S S 不相同的属性列 学 生 名 学生名 ,即为 X X X 属性,对其投影,得到 π 学 生 名 ( R S ) = { 张 三 , 李 四 } \pi_{学生名}(RS) = \{张三, 李四\} π(RS)={,}
  3. 对于 X X X 属性中的每一个分量值 x x x,有像集 Y x Y_x Yx:张三的像集为 { 语 文 , 数 学 } \{语文, 数学\} {,};李四的像集为 { 语 文 } \{语文\} {}
  4. 判断包含关系,只有张三包含了关系 S S S 中的属性 Y Y Y 的所有值,因此求得结果为: { 张 三 } \{张三\} {}

所以,可以容易看出来 R S ÷ S RS÷S RS÷S 在这里解决的问题就是:“得到选修了所有课程的学生”。 R S ÷ S RS÷S RS÷S 的意义就是:“在 R R R S S S 的联系 R S RS RS 中,找出与 S S S所有的元组有关系 R R R 元组”。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐