关系的描述称为关系模式,可以形式化地表示为
R
(
U
,
D
,
D
O
M
,
F
)
R(U , D , DOM , F)
R(U,D,DOM,F),其中
R
R
R为关系名,
U
U
U为组成该关系的属性名集合,
D
D
D为
U
U
U中属性所来自的域,
D
O
M
DOM
DOM为属性向域的映像集合,
F
F
F为属性间数据的依赖关系集合
设
F
F
F是基本关系
R
R
R的一个或一组属性,但不是关系
R
R
R的码,
K
s
K_{s}
Ks?是基本关系
S
S
S的主码,如果
F
F
F与
K
s
K_{s}
Ks?相对应,则称
F
F
F是
R
R
R的外码,并称基本关系
R
R
R为参照关系,基本关系
S
S
S为被参照关系或目标关系,关系
R
R
R和
S
S
S不一定是不同的关系
若属性(或属性组)
F
F
F是基本关系
R
R
R的外码,它与基本关系
S
S
S的主码
K
s
K_{s}
Ks?相对应(基本关系
R
R
R和
S
S
S不一定是不同的关系),则对于
R
R
R中每个元组在
F
F
F上的值必须
或者取空值(
F
F
F的每个属性值均为空值)
或者等于
S
S
S中某个元组的主码值
用户定义的完整性
2.4|关系代数
传统的集合运算
传统的集合运算是二目运算,包括并、差、交、笛卡尔积
4
4
4种运算
设关系
R
R
R和关系
S
S
S具有相同的目
n
n
n,且相应的属性取自同一个域,
t
t
t是元组变量,
t
∈
R
t \in R
t∈R表示
t
t
t是
R
R
R的一个元组,可以定义并、差、交、笛卡尔积运算如下
并
R
∪
S
=
{
?
t
∣
t
∈
R
∨
t
∈
S
?
}
R \cup S = \set{t \mid t \in R \vee t \in S}
R∪S={t∣t∈R∨t∈S}
差
R
?
S
=
{
?
t
∣
t
∈
R
∧
t
?
S
?
}
R - S = \set{t \mid t \in R \wedge t \notin S}
R?S={t∣t∈R∧t∈/S}
交
R
∩
S
=
{
?
t
∣
t
∈
R
∧
t
∈
S
?
}
R \cap S = \set{t \mid t \in R \wedge t \in S}
R∩S={t∣t∈R∧t∈S}
笛卡尔积
两个分别为
n
n
n目和
m
m
m目的关系
R
R
R和
S
S
S的笛卡尔积是一个
n
+
m
n + m
n+m列的元组的集合,元组的前
n
n
n列是关系
R
R
R的一个元组,后
m
m
m列是关系
S
S
S的一个元组,记作
R
×
S
=
{
?
t
r
t
s
^
∣
t
r
∈
R
∧
t
s
∈
S
?
}
R \times S = \set{\widehat{t_{r} t_{s}} \mid t_{r} \in R \wedge t_{s} \in S}
R×S={tr?ts??∣tr?∈R∧ts?∈S}
专门的关系运算
专门的关系运算包括选择、投影、连接、除运算
设关系模式为
R
(
A
1
,
A
2
,
?
?
,
A
n
)
R(A_{1} , A_{2} , \cdots , A_{n})
R(A1?,A2?,?,An?),它的一个关系设为
R
R
R,
t
∈
R
t \in R
t∈R表示
t
t
t是
R
R
R的一个元组,
t
[
A
i
]
t[A_{i}]
t[Ai?]则表示元组
t
t
t中相应于属性
A
i
A_{i}
Ai?的一个分量,若
A
=
{
?
A
i
1
,
A
i
2
,
?
?
,
A
i
k
?
}
A = \set{A_{i1} , A_{i2} , \cdots , A_{ik}}
A={Ai1?,Ai2?,?,Aik?},其中
A
i
1
A_{i1}
Ai1?,
A
i
2
A_{i2}
Ai2?,
?
\cdots
?,
A
i
k
A_{ik}
Aik?是
A
1
A_{1}
A1?,
A
2
A_{2}
A2?,
?
\cdots
?,
A
n
A_{n}
An?中的一部分,则
A
A
A称为属性列或属性组,
t
[
A
]
=
(
t
[
A
i
1
]
,
t
[
A
i
2
]
,
?
?
,
t
[
A
i
k
]
)
t[A] = (t[A_{i1}] , t[A_{i2}] , \cdots , t[A_{ik}])
t[A]=(t[Ai1?],t[Ai2?],?,t[Aik?])表示元组
t
t
t在属性列
A
A
A上诸分量的集合,
A
ˉ
\bar{A}
Aˉ则表示
{
?
A
1
,
A
2
,
?
?
,
A
n
?
}
\set{A_{1} , A_{2} , \cdots , A_{n}}
{A1?,A2?,?,An?}中去掉
{
?
A
i
1
,
A
i
2
,
?
A
i
k
?
}
\set{A_{i1} , A_{i2} , \cdots A_{ik}}
{Ai1?,Ai2?,?Aik?}后剩余的属性组
R
R
R为
n
n
n目关系,
S
S
S为
m
m
m目关系,
t
r
∈
R
t_{r} \in R
tr?∈R,
t
s
∈
S
t_{s} \in S
ts?∈S,
t
r
t
s
^
\widehat{t_{r} t_{s}}
tr?ts??称为元组的连接或元组的串接
给定一个关系
R
(
X
,
Z
)
R(X , Z)
R(X,Z),
X
X
X和
Z
Z
Z为属性组,当
t
[
X
]
=
x
t[X] = x
t[X]=x时,
x
x
x在
R
R
R中的象集定义为
Z
x
=
{
?
t
[
Z
]
∣
t
∈
R
,
t
[
X
]
=
x
?
}
Z_{x} = \set{t[Z] \mid t \in R , t[X] = x}
Zx?={t[Z]∣t∈R,t[X]=x},它表示
R
R
R中属性组
X
X
X上值为
x
x
x的诸元组在
Z
Z
Z上分量的集合
选择
选择又称为限制,在关系
R
R
R中选择满足给定条件的诸元组,记作
σ
F
(
R
)
=
{
?
t
∣
t
∈
R
∧
F
(
t
)
=
真
?
}
\sigma_{F}(R) = \set{t \mid t \in R \wedge F(t) = 真}
σF?(R)={t∣t∈R∧F(t)=真}
其中
F
F
F表示选择条件,是一个逻辑表达式
投影
关系
R
R
R上的投影是从
R
R
R中选择出若干属性列组成新的关系,记作
Π
A
R
=
{
?
t
[
A
]
∣
t
∈
R
?
}
\Pi_{A}{R} = \set{t[A] \mid t \in R}
ΠA?R={t[A]∣t∈R}
其中
A
A
A为
R
R
R中的属性列
连接
连接也称为
θ
\theta
θ连接,从两个关系的笛卡尔积中选取属性间满足一定条件的元组,记作
R
?
A
θ
B
S
=
{
?
t
r
t
s
^
∣
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
A
]
θ
t
s
[
B
]
?
}
R \substack{\Join \\ A \theta B} S = \set{\widehat{t_{r} t_{s}} \mid t_{r} \in R \wedge t_{s} \in S \wedge t_{r}[A] \theta t_{s}[B]}
R?AθB?S={tr?ts??∣tr?∈R∧ts?∈S∧tr?[A]θts?[B]}
其中,
A
A
A和
B
B
B分别为
R
R
R和
S
S
S上列数相等且可比的属性组,
θ
\theta
θ是比较运算符
等值连接
θ
\theta
θ为“
=
=
=”的连接运算称为等值连接
自然连接
自然连接是一种特殊的等值连接,要求两个关系中进行比较的分量必须是同名的属性组,并且在结果中把重复的属性列去掉,即若
R
R
R和
S
S
S中具有相同的属性组
B
B
B,
U
U
U为
R
R
R和
S
S
S的全体属性集合,则自然连接可记作
R
?
S
=
{
?
t
r
t
s
^
[
U
?
B
]
∣
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
B
]
=
t
s
[
B
]
?
}
R \Join S = \set{\widehat{t_{r} t_{s}}[U - B] \mid t_{r} \in R \wedge t_{s} \in S \wedge t_{r}[B] = t_{s}[B]}
R?S={tr?ts??[U?B]∣tr?∈R∧ts?∈S∧tr?[B]=ts?[B]}
在做自然连接时,被舍弃的元组称为悬浮元组,如果把悬浮元组也保存在结果中,而在其他属性上填空值,那么这种连接就叫做外连接,如果只保留左边关系
R
R
R中的悬浮元组就叫做左外连接,如果只保留右边关系
S
S
S中的悬浮元组就叫做右外连接
除运算
设关系
R
R
R除以关系
S
S
S的结果为关系
T
T
T,则
T
T
T包含所有在
R
R
R但不在
S
S
S中的属性及其值,且
T
T
T的元组与
S
S
S的元组的所有组合都在
R
R
R中
给定关系
R
(
X
,
Y
)
R(X , Y)
R(X,Y)和
S
(
Y
,
Z
)
S(Y , Z)
S(Y,Z),其中
X
X
X、
Y
Y
Y、
Z
Z
Z为属性组,
R
R
R中
Y
Y
Y与
S
S
S中的
Y
Y
Y可以有不同的属性名,但必须出自相同的域集,
R
R
R与
S
S
S的除运算得到一个新的关系
P
(
X
)
P(X)
P(X),
P
P
P是
R
R
R中满足下列条件的元组在
X
X
X属性列上的投影:元组在
X
X
X上分量值
x
x
x的象集
Y
x
Y_{x}
Yx?包含
S
S
S在
Y
Y
Y上投影的集合,记作
R
÷
S
=
{
?
t
r
[
X
]
∣
t
r
∈
R
∧
Π
Y
(
S
)
?
Y
x
?
}
R \div S = \set{t_{r}[X] \mid t_{r} \in R \wedge \Pi_{Y}(S) \subseteq Y_{x}}
R÷S={tr?[X]∣tr?∈R∧ΠY?(S)?Yx?}
其中
Y
x
Y_{x}
Yx?为
x
x
x在
R
R
R中的象集,
x
=
t
r
[
X
]
x = t_{r}[X]
x=tr?[X]
示例
以学生
?
-
?课程数据库为例,查询至少选修
1
1
1号课程和
3
3
3号课程的学生号码
首先建立一个临时关系
K
K
K
然后求
Π
S
n
o
,
C
n
o
(
S
C
)
÷
K
\Pi_{Sno , Cno}(SC) \div K
ΠSno,Cno?(SC)÷K