在关系数据库中,关系的定义为:给定一组域D1,D2,…,Dn,这些域中可以使相同的域。D1,D2,…,Dn的笛卡尔积D1×D2×…×Dn的子集叫做在域D1,D2,…,Dn上的关系,表示为R(D1,D2,…,Dn)。这里R表示关系的名字,n是关系的目或度。
- 属性 attribute
- 域 domain:每个属性的取值范围所对应一个值的集合,称为该属性的域。
- 目或度 degree
- 候选码 candidate key:若关系中的某一属性或属性组的值能唯一的标识一个元组,则称该属性或属性组为候选码。
- 主码 primary key :或称为主键,若一个关系有多个候选码,则选定其中一个为主码。
- 主属性 prime attribute:包含在任何候选码中的诸属性称为主属性。不包含在任何候选码中的属性称为非主属性。
- 外码 foreign key:如果关系模式 R R R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式 R R R而言是外码
- 全码 all key:关系模型的所有属性组是这个关系模式的候选码,称为全码。
设
D
1
,
D
2
,
D
3
,
⋯
,
D
n
D_1,D_2,D_3,\cdots,D_n
D1,D2,D3,⋯,Dn为任意集合,定义
D
1
,
D
2
,
D
3
,
⋯
,
D
n
D_1,D_2,D_3,\cdots,D_n
D1,D2,D3,⋯,Dn的笛卡儿积为:
D
1
×
D
2
×
D
3
×
⋯
×
D
n
=
{
(
d
1
,
d
2
,
d
3
,
⋯
,
d
n
)
∣
d
i
∈
D
i
,
i
=
1
,
2
,
3
,
⋯
n
}
D_1 \times D_2 \times D_3 \times \cdots \times D_n = \{(d_1,d_2,d_3,\cdots,d_n)|d_i \in D_i,i=1,2,3,\cdots n\}
D1×D2×D3×⋯×Dn={(d1,d2,d3,⋯,dn)∣di∈Di,i=1,2,3,⋯n}
其中集合中的每一个元素
(
d
1
,
d
2
,
d
3
,
⋯
,
d
n
)
(d_1,d_2,d_3,\cdots,d_n)
(d1,d2,d3,⋯,dn)叫做一个
n
n
n元组(
n
n
n-tuple,即
n
n
n个属性的元组),元组中的每一个值
d
i
d_i
di叫做元组一个分量。若
D
i
(
i
=
1
,
2
,
3
,
⋯
,
n
)
D_i(i=1,2,3,\cdots,n)
Di(i=1,2,3,⋯,n)为有限集,其基数(Cardinal Number,元组的个数)为
m
i
(
i
=
1
,
2
,
3
,
⋯
,
n
)
m_i(i=1,2,3,\cdots,n)
mi(i=1,2,3,⋯,n),则
D
1
×
D
2
×
D
3
×
⋯
×
D
n
D_1 \times D_2 \times D_3 \times \cdots \times D_n
D1×D2×D3×⋯×Dn的基数
M
M
M为:
M
=
∏
i
=
1
n
m
i
M=\prod\limits_{i=1}^nm_i
M=i=1∏nmi。
D
1
×
D
2
×
D
3
×
⋯
×
D
n
D_1 \times D_2 \times D_3 \times \cdots \times D_n
D1×D2×D3×⋯×Dn的子集叫做在域
D
1
,
D
2
,
D
3
,
⋯
,
D
n
D_1,D_2,D_3,\cdots,D_n
D1,D2,D3,⋯,Dn上的关系,记为
R
(
D
1
,
D
2
,
D
3
,
⋯
,
D
n
)
R(D_1,D_2,D_3,\cdots,D_n)
R(D1,D2,D3,⋯,Dn),称关系
R
R
R为
n
n
n元关系。
关系中属性的个数称为元数,元组的个数称为基数。
关系的描述称为关系模式,可以形式化地表示为:
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是属性的域,
d
o
m
dom
dom是属性向域的映像集合,
F
F
F为属性间数据的依赖关系集合。
通常将关系模式简记为:
R
(
U
)
或
R
(
A
1
,
A
2
,
A
3
,
⋯
,
A
n
)
R(U)或R(A_1,A_2,A_3,\cdots,A_n)
R(U)或R(A1,A2,A3,⋯,An)
其中,
R
R
R为关系名,
A
1
,
A
2
,
A
3
,
⋯
,
A
n
A_1,A_2,A_3,\cdots,A_n
A1,A2,A3,⋯,An为属性名或域名,属性向域的映像常常直接说明属性的类型、长度。通常在关系模式主属性加下划线表示该属性为主码属性。
关系的完整性约束共分为三类:实体完整性、参照完整性(也称引用完整性)和用户定义完整性。
- 实体完整性 entity integrity。规定基本关系 R R R的主属性 A A A不能取空值。
- 参照完整性 referential integrity。
- 用户定义完整性 user defined integrity。
五种基本的关系代数运算
五种基本的关系代数运算包括并、差、笛卡儿积、投影和选择。
1. 并 Union
关系
R
R
R与
S
S
S具有相同的关系模式,即
R
R
R与
S
S
S的元数相同(结构相同)。关系
R
R
R与
S
S
S并由属于
R
R
R或属于
S
S
S的元组构成的集合组成,记作
R
∪
S
R\cup S
R∪S,其形式定义如下:
R
∪
S
=
{
t
∣
t
∈
R
∨
t
∈
S
}
R\cup S=\{t|t \in R \vee t \in S\}
R∪S={t∣t∈R∨t∈S}
2. 差 Difference
关系
R
R
R与
S
S
S具有相同的关系模式,关系
R
R
R与
S
S
S的差是由属于
R
R
R但不属于
S
S
S的元组构成的集合,记作
R
−
S
R-S
R−S,其形式定义如下:
R
−
S
=
{
t
∣
t
∈
R
∧
t
∈
S
}
R - S=\{t|t \in R \wedge t \in S\}
R−S={t∣t∈R∧t∈S}
3. 广义笛卡儿积 Extended Cartesian Product
两个元素分别为
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
R \times S
R×S,其形式定义如下:
R
×
S
=
{
t
∣
t
=
<
t
n
,
t
m
>
∧
t
n
∈
R
∧
t
m
∈
S
}
R \times S = \{t|t=< t^n,t^m > \wedge t^n \in R \wedge t^m \in S\}
R×S={t∣t=<tn,tm>∧tn∈R∧tm∈S}
<
t
n
,
t
m
>
< t^n,t^m>
<tn,tm>意为元组
t
n
t^n
tn和
t
m
t^m
tm拼接成的一个元组。
4. 投影 Projection
投影运算是从关系的垂直方向进行运算,在关系
R
R
R中选择出若干属性列
A
A
A组成新的关系,记作
π
A
(
R
)
\pi_A(R)
πA(R),其形式定义如下:
π
A
(
R
)
=
{
t
[
A
]
∣
t
∈
R
}
\pi_A(R)=\{t[A]|t \in R\}
πA(R)={t[A]∣t∈R}
5. 选择 Selection
选择运算是从关系的水平方向进行运算,是从关系
R
R
R中选择满足给定条件的诸元组,记作
σ
F
(
R
)
\sigma_F(R)
σF(R),其形式定义如下:
σ
F
(
R
)
=
{
t
∣
t
∈
R
∧
F
(
t
)
=
T
r
u
e
}
\sigma_F(R)=\{t|t \in R \wedge F(t) = True\}
σF(R)={t∣t∈R∧F(t)=True}
其中,
F
F
F中的运算对象是属性名(或列的序号)或常数,运算符、算术比较运算符和逻辑运算符。
σ
1
≥
6
(
R
)
\sigma_{1 \geq 6}(R)
σ1≥6(R)表示选取
R
R
R关系中第一个属性值大于第六个属性值的元组;
σ
1
≥
′
6
′
(
R
)
\sigma_{1 \geq '6'}(R)
σ1≥′6′(R)表示选取
R
R
R关系中第一个属性值大于6的元组;
6. 交 Intersection
关系
R
R
R与
S
S
S具有相同的关系模式,关系
R
R
R与
S
S
S的交是由属于
R
R
R同时又属于
S
S
S的元组构成的集合,关系
R
R
R与
S
S
S的交记作
R
∩
S
R \cap S
R∩S,其形式定义如下:
R
∩
S
=
{
t
∣
t
∈
R
∧
t
∈
S
}
R \cap S = \{t| t\in R \wedge t \in S\}
R∩S={t∣t∈R∧t∈S}
R
∩
S
=
R
−
(
R
−
S
)
R \cap S = R-(R-S)
R∩S=R−(R−S)或者
R
∩
S
=
S
−
(
S
−
R
)
R \cap S = S - (S-R)
R∩S=S−(S−R)
7. 连接 join
连接分为 θ \theta θ连接、等值连接及自然连接三种。连接运算是从两个关系 R R R和 S S S的笛卡儿积中选取满足条件的元组。因此,可以认为笛卡儿积是无条件连接,其他的连接操作认为是有条件连接。
-
θ
\theta
θ连接
θ \theta θ连接是从 R R R与 S S S的笛卡儿积中选取属性间满足一定条件的元组。其形式定义如下:
R ⋈ X θ Y S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ X ] θ t m [ Y ] } R \mathop {\bowtie}\limits_{X \theta Y} S = \{t|t=<t^n,t^m > \wedge t^n \in R \wedge t^m \in S \wedge t^n[X] \theta t^m[Y]\} RXθY⋈S={t∣t=<tn,tm>∧tn∈R∧tm∈S∧tn[X]θtm[Y]}
其中: ′ X θ Y ′ 为 连 接 的 条 件 'X \theta Y'为连接的条件 ′XθY′为连接的条件, θ \theta θ是比较运算符, X X X和 Y Y Y分别为 R R R和 S S S上度数相等,且可比的属性组。 t n [ X ] t^n[X] tn[X]表示 R R R中 t n t^n tn元组的相应于属性 X X X的一个分量。 t m [ Y ] t^m[Y] tm[Y]表示 S S S中 t m t^m tm的相应于属性 Y Y Y的一个分量。需要说明的是:
θ \theta θ连接也可以表示为:
R ⋈ i θ j S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ i ] θ t m [ j ] } R \mathop {\bowtie}\limits_{i \theta j} S = \{t|t=<t^n,t^m > \wedge t^n \in R \wedge t^m \in S \wedge t^n[i] \theta t^m[j]\} Riθj⋈S={t∣t=<tn,tm>∧tn∈R∧tm∈S∧tn[i]θtm[j]}
其中: i = 1 , 2 , 3 ⋯ , n , j = 1 , 2 , 3 , ⋯ , m i=1,2,3\cdots,n,j=1,2,3,\cdots,m i=1,2,3⋯,n,j=1,2,3,⋯,m, ′ i θ j ′ 'i \theta j' ′iθj′的含义为从两个关系 R R R和 S S S中选取 R R R的第 i i i列和 S S S的第 j j j列满足 θ \theta θ运算的元组进行连接。
θ \theta θ连接可以由基本的关系运算笛卡儿积和选取 运算导数。因此 θ \theta θ连接可表示为:
R ⋈ X θ Y S = σ X θ Y ( R × S ) 或 R ⋈ i θ j = σ i θ ( i + j ) ( R × S ) R \mathop {\bowtie}\limits_{X \theta Y} S = \sigma_{X \theta Y } (R \times S) 或 R \mathop {\bowtie}\limits_{i \theta j} =\sigma_{i \theta (i+j) } (R \times S) RXθY⋈S=σXθY(R×S)或Riθj⋈=σiθ(i+j)(R×S) - 等值连接 Equijoin
当 θ \theta θ为“ = = =”时,称之为等值连接,记为 R ⋈ X = Y S R \mathop {\bowtie}\limits_{X = Y} S RX=Y⋈S。其形式定义如下:
R ⋈ X = Y S = { t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S ∧ t n [ X ] = t m [ Y ] } R \mathop {\bowtie}\limits_{X = Y} S = \{t|t=<t^n,t^m > \wedge t^n \in R \wedge t^m \in S \wedge t^n[X] = t^m[Y]\} RX=Y⋈S={t∣t=<tn,tm>∧tn∈R∧tm∈S∧tn[X]=tm[Y]} - 自然连接 Natural Join
自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉。
若 t n t^n tn表示 R R R关系的元组变量, t m t^m tm表示 S S S关系的元组变量; R R R和 S S S具有相同的属性组 B B B,且 B = ( B 1 , B 2 , ⋯ , B k ) B=(B_1,B_2,\cdots,B_k) B=(B1,B2,⋯,Bk);并假定 R R R关系的属性为 A 1 , A 2 , ⋯ , A n − k , B 1 , B 2 , ⋯ , B k A_1,A_2,\cdots,A_{n-k},B_1,B_2,\cdots,B_k A1,A2,⋯,An−k,B1,B2,⋯,Bk, S S S关系的属性为 B 1 , B 2 , ⋯ , B k , B k + 1 , B k + 2 , ⋯ , B m B_1,B_2,\cdots,B_k,B_{k+1},B_{k+2},\cdots,B_m B1,B2,⋯,Bk,Bk+1,Bk+2,⋯,Bm;为 S S S的元组变量 t m t^m tm去掉重复属性 B B B所组成的新元组变量为 t m ∗ t^{m^*} tm∗。自然连接可以记为 R ⋈ S R \bowtie S R⋈S, 其形式定义如下:
R ⋈ S = { t ∣ t = < t n , t m ∗ > ∧ t n ∈ R ∧ t m ∈ S ∧ R . B 1 = S . B 1 ∧ R . B 2 = S . B 2 ∧ ⋯ ∧ R . B n = S . B n } R \bowtie S=\{t|t=<t^n,t^{m^*} > \wedge t^n \in R \wedge t^m \in S \wedge R.B_1 = S.B_1 \wedge R.B_2 = S.B_2 \wedge \cdots \wedge R.B_n = S.B_n \} R⋈S={t∣t=<tn,tm∗>∧tn∈R∧tm∈S∧R.B1=S.B1∧R.B2=S.B2∧⋯∧R.Bn=S.Bn}
自然连接可以由基本的关系元素笛卡儿积和选取运算导出,因此自然连接可表示为:
R ⋈ S = ∏ A 1 , A 2 , ⋯ , A n − k , R . B 1 , R . B 2 , ⋯ , R . B k , B k + 1 , B k + 2 , ⋯ , B m ( σ R . B 1 = S . B 1 ∧ R . B 2 = S . B 2 ∧ ⋯ ∧ R . B k = S . B k ( R × S ) ) R \bowtie S=\prod_{A_1,A_2,\cdots,A_{n-k},R.B_1,R.B_2,\cdots,R.B_k,B_{k+1},B_{k+2},\cdots,B_m}(\sigma_{R.B_1 = S.B_1 \wedge R.B_2 = S.B_2 \wedge \cdots \wedge R.B_k = S.B_k}(R \times S)) R⋈S=∏A1,A2,⋯,An−k,R.B1,R.B2,⋯,R.Bk,Bk+1,Bk+2,⋯,Bm(σR.B1=S.B1∧R.B2=S.B2∧⋯∧R.Bk=S.Bk(R×S))
8. 除 Division
9.广义投影 Generalized Projection
10. 外连接 Outer Jion
11. 聚集函数
设 R ( U ) R(U) R(U)是属性集 U U U上的关系模式, X 、 Y X、Y X、Y是 U U U的子集。若对 R ( U ) R(U) R(U)中的任何一个可能的关系 r r r, r r r中不可能存在两个元组在 X X X上的属性值相等,而在 Y Y Y上的属性值不等,则称 X X X函数决定 Y Y Y或 Y Y Y函数依赖于 X X X,记作: X → Y X \rightarrow Y X→Y。
如果
X
→
Y
X \rightarrow Y
X→Y,但
Y
⊈
X
Y \not \subseteq X
Y⊆X,则称
X
→
Y
X \rightarrow Y
X→Y是非平凡的函数依赖。
如果
X
→
Y
X \rightarrow Y
X→Y,但
Y
⊆
X
Y \subseteq X
Y⊆X,则称
X
→
Y
X \rightarrow Y
X→Y是平凡的函数依赖。
函数依赖是语义范畴的概念,我们只能根据语义确定函数依赖。
在 R ( U ) R(U) R(U)中,如果 X → Y X \rightarrow Y X→Y,并且对于 X X X的任何一个真子集 X ′ X' X′,都有 X ′ X' X′不能决定 Y Y Y,则称 Y Y Y对 X X X完全函数依赖,记作: X → f Y X\overset f \rightarrow Y X→fY。如果 X → Y X \rightarrow Y X→Y,但 Y Y Y不完全函数依赖于 X X X,则称 Y Y Y对 X X X部分函数依赖,记作: X → p Y X\overset p \rightarrow Y X→pY。部分函数依赖也称局部函数依赖。
在 R ( U , F ) R(U,F) R(U,F)中,如果 X → Y , Y ⊈ X , Y ↛ X , Y → Z X \rightarrow Y, Y \not \subseteq X, Y \not \rightarrow X, Y \rightarrow Z X→Y,Y⊆X,Y→X,Y→Z,则称 Z Z Z对 X X X传递依赖。
设 K K K为 R ( U , F ) R(U,F) R(U,F)中的属性组合,若 K → U K \rightarrow U K→U,且对于 K K K的任何一个真子集 K ′ K' K′,都有 K ′ K' K′不能决定 U U U,则 K K K为 R R R的候选码,若有多个候选码,则选一个作为主码。
若 R ( U ) R(U) R(U)中的属性或属性组 X X X非 R R R的码,但 X X X是另一个关系的码,则称 X X X是 R R R的外码或称外键。
若关系模式
R
(
U
)
R(U)
R(U)中,
X
、
Y
、
Z
X、Y、Z
X、Y、Z是
U
U
U的子集,并且
Z
=
U
−
X
−
Y
Z=U-X-Y
Z=U−X−Y。当且仅当对
R
(
U
)
R(U)
R(U)中的任何一个关系
r
r
r,给定一对
(
x
,
z
)
(x,z)
(x,z)值,有一组
Y
Y
Y的值,这组值仅仅决定于
x
x
x值而与
z
z
z无关,则称”
Y
Y
Y多值依赖于
X
X
X“或”
X
X
X多值决定
Y
Y
Y“成立。记为:
X
→
→
Y
X \rightarrow \rightarrow Y
X→→Y。
多值依赖具有如下性质:
- 多值依赖具有对称性。即若 X → → Y X \rightarrow \rightarrow Y X→→Y,则 X → → Z X \rightarrow \rightarrow Z X→→Z,其中 Z = U − X − Y Z=U-X-Y Z=U−X−Y。
- 多值依赖的传递性。即若 X → → Y , Y → → Z X \rightarrow \rightarrow Y,Y \rightarrow \rightarrow Z X→→Y,Y→→Z,则 X → → Z − Y X \rightarrow \rightarrow Z-Y X→→Z−Y
- 函数依赖可以看成是多值依赖的特殊情况。
- 若 X → → Y , X → → Z X \rightarrow \rightarrow Y,X \rightarrow \rightarrow Z X→→Y,X→→Z,则 X → → Y Z X \rightarrow \rightarrow YZ X→→YZ。
- 若 X → → Y , X → → Z X \rightarrow \rightarrow Y,X \rightarrow \rightarrow Z X→→Y,X→→Z,则 X → → Y ∩ Z X \rightarrow \rightarrow Y \cap Z X→→Y∩Z。
- 若 X → → Y , X → → Z X \rightarrow \rightarrow Y,X \rightarrow \rightarrow Z X→→Y,X→→Z,则 X → → Z − Y X \rightarrow \rightarrow Z-Y X→→Z−Y。
1NF 第一范式
若关系模式 R R R的每一个分量是不可再分的数据项,则关系模式 R R R属于第一范式,记为 R ∈ R \in R∈ 1NF
2NF 第二范式
若关系模式
R
∈
1
N
F
R \in 1NF
R∈1NF,且每一个非主属性完全依赖于码,则关系模式
R
∈
R \in
R∈ 2NF。换句话说,当1NF消除了非主属性对码的部分函数依赖,则成为2NF。
包含在任何一个候选码中的属性叫做主属性,否则叫做非主属性。
3NF 第三范式
若关系模式
R
(
U
,
F
)
R(U,F)
R(U,F)中若不存在这样的码
X
X
X,属性组
Y
Y
Y及非主属性
Z
(
Z
⊈
Y
)
Z(Z \not \subseteq Y)
Z(Z⊆Y)使得
X
→
Y
,
(
Y
↛
X
)
Y
→
Z
X \rightarrow Y,(Y \not \rightarrow X)Y \rightarrow Z
X→Y,(Y→X)Y→Z成立,则关系模式
R
∈
R \in
R∈ 3NF。
即当2NF消除了非主属性对码的传递函数依赖,则称为3NF。
BCNF 巴克斯范式
关系模式
R
∈
1
N
F
R \in 1NF
R∈1NF,若
X
→
Y
X \rightarrow Y
X→Y,且
Y
⊈
X
Y \not \subseteq X
Y⊆X,
X
X
X必含有码,则关系模式
R
∈
R \in
R∈ BCNF。
也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,则称为BCNF。
一个满足BCNF的关系模式,应有如下性质:
- 所有非主属性对每一个码都是完全函数依赖;
- 所有非主属性对每一个不好含它的码,也是不完全函数依赖;
- 没有任何属性完全函数依赖于非码的任何一组属性。