对数据库关系代数中除法运算的理解
对数据库关系代数中除法运算的理解
一、基本概念
1.象集
给定一个关系R(X,Z),X和Z为属性组,当t[X]=x时,x在R中的象集定义为:
Z x
{ t [ Z ] ∣ t ∈ R , t [ X ]
x } Z_x={t[Z]|t\in R,t[X]=x}
Z
x
=
{
t
[
Z
]
∣
t
∈
R
,
t
[
X
]
=
x
}
表示R中属性组X上值为x的诸元组在Z上分量的集合。
例:
有如下表R
X取值 | Z取值 |
---|---|
x 1 x_1 x 1 | Z 2 Z_2 Z 2 |
x 1 x_1 x 1 | Z 2 Z_2 Z 2 |
x 1 x_1 x 1 | Z 3 Z_3 Z 3 |
x 2 x_2 x 2 | Z 2 Z_2 Z 2 |
x 2 x_2 x 2 | Z 3 Z_3 Z 3 |
x 3 x_3 x 3 | Z 1 Z_1 Z 1 |
x 3 x_3 x 3 | Z 3 Z_3 Z 3 |
则
x 1 x_1
x
1
在R中的象集
Z x 1
{ Z 1 , Z 2 , Z 3 } Z_{x1}={Z_1,Z_2,Z_3}
Z
x
1
=
{
Z
1
,
Z
2
,
Z
3
}
x 2 x_2
x
2
在R中的象集
Z x 2
{ Z 2 , Z 3 } Z_{x2}={Z_2,Z_3}
Z
x
2
=
{
Z
2
,
Z
3
}
x 3 x_3
x
3
在R中的象集
Z x 3
{ Z 1 , Z 3 } Z_{x3}={Z_1,Z_3}
Z
x
3
=
{
Z
1
,
Z
3
}
2.除法运算
R
÷ S
{ t r [ X ] ∣ t r ∈ R ∧ Π Y ( S ) ⊆ Y x } \div S={t_r[X] |t_r\in R\wedge \Pi_Y(S)\subseteq Y_x}
÷
S
=
{
t
r
[
X
]
∣
t
r
∈
R
∧
Π
Y
(
S
)
⊆
Y
x
}
除运算的结果为P(X)
P是R中满足满足以下条件的元组在X属性上的投影:元组在X上分量值x的象集
Y x Y_x
Y
x
包含S在Y上投影的集合。
这个定义看起来比较难以理解,因此下面给出几个例子。
二、除法运算的例子(通过例子更容易理解)
例一
R和S共有的属性为B和C,在S中(B,C)组合有三种,即
( b 1 , c 2 ) , ( b 2 , c 1 ) , ( b 2 , c 3 ) (b_1,c_2),(b_2,c_1),(b_2,c_3)
(
b
1
,
c
2
)
,
(
b
2
,
c
1
)
,
(
b
2
,
c
3
) ,因此接下来就要找到R中象集为这三个的元素A。
R中
a 1 a_1
a
1
的象集为
{ ( b 1 , c 2 ) , ( b 2 , c 3 ) , ( b 2 , c 1 ) } {(b_1,c_2),(b_2,c_3),(b_2,c_1)}
{(
b
1
,
c
2
)
,
(
b
2
,
c
3
)
,
(
b
2
,
c
1
)}
a 2 a_2
a
2
的象集为
{ ( b 3 , c 7 ) , ( b 2 , c 3 ) } {(b_3,c_7),(b_2,c_3)}
{(
b
3
,
c
7
)
,
(
b
2
,
c
3
)}
a 3 a_3
a
3
的象集为
{ ( b 4 , c 6 ) } {(b_4,c_6)}
{(
b
4
,
c
6
)}
a 4 a_4
a
4
的象集为
{ ( b 6 , c 6 ) } {(b_6,c_6)}
{(
b
6
,
c
6
)}
由于 **只有
a 1 a_1
a
1
的象集包含了S在(B,C)属性组上的投影** ,所以
R ÷ S
{ a 1 } R\div S={a_1}
R
÷
S
=
{
a
1
}
例二
假设有如下R表:
姓名 | 性别 | 班级 | 年龄 |
---|---|---|---|
A | 男 | 1班 | 14 |
B | 女 | 1班 | 15 |
C | 男 | 2班 | 14 |
D | 男 | 2班 | 15 |
E | 女 | 2班 | 15 |
有如下S表:
性别 | 班级 |
---|---|
男 | 2班 |
则
R ÷ S R\div S
R
÷
S 的结果如下:
姓名 | 年龄 |
---|---|
C | 14 |
D | 15 |
即我们可以将S看作是一个条件,从R中筛选出满足条件S的元组,同时,除去R中与S共有的属性(列)
例如上面一个例子就是选择出既是2班的,性别又为男的所有学生的姓名和年龄。
参考资料
1.《数据库系统概论》王珊,萨师煊