关系型数据库理论基础
信息世界中的基本概念
1)实体(entity)
客观存在并可相互区别的事物称为实体。实体可以是具体的人、事、物,也可以是抽象的概念或联系。
2)属性(attribute)
实体所具有的某一特性称为属性。一个实体可以由若干个属性来刻画。
3)码(key)
唯一标识实体的属性集称为码。
4)实体型(entity type)
具有相同属性的实体必然具有共同的特征和性质。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型。
5)实体集(entity set)
同一类型实体的集合称为实体集。
6)联系(relationship)
在现实世界中,事物内部以及事物之间是有联系的,这些联系在信息世界中反应为实体(型)内部的联系和实体(型)之间的联系。实体之间的联系有一对一、一对多和多对多等多种类型。
概念模型的一种表示方法:实体-联系方法
概念模型是对信息世界建模,所以概念模型应该能够方便、准确的表示出信息世界中的常用概念,概念模型的表示方法有很多,其中最为常用的是P.P.S.Chen于1976年提出的实体-联系方法(Entity-Relationship approach)。该方法用E-R图来描述现实世界概念模型。
关系型数据库
1970年,E.F.Codd再美国计算机学会会刊《Communications of the ACM》上发表了题为"A Relational Model of Data for Shared Data Banks"的论文,开创了数据库系统的新纪元。ACM 1983年把这篇论文列为从1958年以来的四分之一世纪中具有里程碑意义的25篇研究论文之一。此后,E.F.Codd连续发表了多篇论文,奠定了关系数据库的理论基础。
域(domain)
定义: 域是一组具有相同数据类型的值的集合。
笛卡尔积(cartesian product)
笛卡尔积是域上的一种集合运算。
定义: 给定一个域D1,D2,…,Dn,允许其中某些域是相同的,D1,D2,…,Dn的笛卡尔积为
D
1
×
D
2
×
⋯
×
D
n
=
{
(
d
1
,
d
2
,
⋯
,
d
n
)
}
∣
d
i
∈
D
i
i
=
1
,
2
,
⋯
,
n
D_1 \times D_2 \times \cdots \times D_n=\{(d1,d2,\cdots,d_n)\} | d_i \in D_i i=1,2, \cdots,n
D1×D2×⋯×Dn={(d1,d2,⋯,dn)}∣di∈Dii=1,2,⋯,n
其中,每一个元素
(
d
1
,
d
2
,
.
.
.
,
d
n
)
(d_1,d_2,...,d_n)
(d1,d2,...,dn)
叫做一个n元组(n-tuple),或简称元组(tuple)元素中的每一个值di叫做一个分量(component)
一个域允许的不同取值个数成为这个域的基数(cardinal number)
若
D
i
(
i
=
1
,
2
,
⋯
,
n
)
D_i(i=1,2,\cdots,n)
Di(i=1,2,⋯,n)为有限集,其基数为
m
i
(
i
=
1
,
2
,
⋯
,
n
)
m_i(i=1,2,\cdots,n)
mi(i=1,2,⋯,n)则
D
1
×
D
2
×
⋯
×
D
n
D_1 \times D_2 \times \cdots \times D_n
D1×D2×⋯×Dn
的基数M为
M
=
∏
i
=
1
n
m
i
M= \prod_{i=1}^{n}m_i
M=∏i=1nmi
关系(relation)
定义:
D
1
×
D
2
×
⋯
×
D
n
D_1 \times D_2 \times \cdots \times D_n
D1×D2×⋯×Dn的子集叫做在域
D
1
,
D
2
,
⋯
,
D
n
D_1,D_2, \cdots ,D_n
D1,D2,⋯,Dn上的关系,表示为
R
(
D
1
,
D
2
,
⋯
,
D
n
)
R(D_1,D_2,\cdots,D_n)
R(D1,D2,⋯,Dn)
这里R表示关系的名字,n是关系的目或度(degree)。
-
若关系中的某一属性组的值能唯一地标识一个元组,而其子集不能,则称该属性组为候选码(candidate key)。
-
若一个关系有多个候选码,则选定其中一个为主码(primary key)。
在简单的情况下,候选码只包含一个属性,在最极端的情况下,关系模式的所有属性是这个关系模型的候选码,称为全码(all-key)
关系可以有三种类型:基本关系(通常又称为基本表或基表)、查询表和视图表。
基本关系具有如下性质:
1)列是同质的(homogeneous),即每一列中的分量是同一类型的数据,来自同一个域。
2)不同的列可以出自同一个域,称其中的每一列为一个属性,不同的属性要给予不同的属性名。
3)列的顺序不所谓,即列的次序可以任意交换。
4)任意两个元组的候选码不能取相同的值。
5)行的顺序无所谓,即行的次序可以任意交换。
6)分量必须取原子值,即每一个分量都必须是不可分的数据项。
关系代数
关系代数是一种抽象的查询语言,它用对关系的运算来表达查询。
关系代数的运算按运算符的不同可分为传统的集合运算和专门的关系运算两类
集合运算符
运算符 | 含义 |
---|---|
∪ \cup ∪ | 并 |
- | 差 |
∩ \cap ∩ | 交 |
× \times × | 笛卡尔积 |
关系运算符
运算符 | 含义 |
---|---|
σ \sigma σ | 选择 |
∏ \prod ∏ | 投影 |
⋈ \Join ⋈ | 连接 |
÷ \div ÷ | 除 |
传统集合运算
设关系R和关系S具有相同的目n(即两个关系都有n个属性),且相应的属性取自同一个域,t是元组变量,
t
∈
R
t \in R
t∈R表示t是R的一个元组。
1)并(union)
关系R与关系S的并记作
R ∪ S = { t ∈ R ∨ t ∈ S } R \cup S=\{t \in R \vee t \in S \} R∪S={t∈R∨t∈S}
其结果仍未n目关系,由属于R或属于S的元组组成。
2)差(except)
关系R与关系S的差记作
R
−
S
=
{
t
∣
t
∈
R
∧
t
∉
S
}
R-S=\{t|t \in R \wedge t \notin S \}
R−S={t∣t∈R∧t∈/S}
其结果关系仍未n目关系,由属于R而不属于S的所有元组组成。
3)交(intersection)
关系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}
其结果关系仍为n目关系,由既属于R又属于S的元组组成。关系的交可以用差来表示,即
R
∩
S
=
R
−
(
R
−
S
)
R \cap S=R-(R-S)
R∩S=R−(R−S)
4)笛卡尔积(cartesian product)
两个分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。
元组的前n列是关系R的一个元组,后m列是关系S的一个元组。若R有
k
1
k_1
k1个元组,S有
k
2
k_2
k2个元组,则关系R和关系S的笛卡尔积有
k
1
×
k
2
k_1 \times k_2
k1×k2个元组。记作
R
×
S
=
{
t
r
t
s
‾
∣
t
r
∈
R
∧
t
s
∈
S
}
R \times S=\{ \overline {t_rt_s}| t_r \in R \wedge t_s \in S \}
R×S={trts∣tr∈R∧ts∈S}
专门的关系运算
首先引入几个记号:
1)设关系模式为
R
(
A
1
,
A
2
,
⋯
,
A
n
)
R(A_1,A_2,\cdots,A_n)
R(A1,A2,⋯,An),他的一个关系设为R。
t
∈
R
t \in R
t∈R表示 t 是R的一个元组。
t
[
A
i
]
t[A_i]
t[Ai]则表示元组t中相应于属性A_i的一个分量
2)若
A
=
{
A
i
1
,
A
i
2
,
⋯
,
A
i
k
}
A=\{A_{i1},A_{i2},\cdots,A_{ik} \}
A={Ai1,Ai2,⋯,Aik},其中
A
i
1
,
A
i
2
,
⋯
,
A
i
k
A_{i1},A_{i2},\cdots,A_{ik}
Ai1,Ai2,⋯,Aik是
A
1
,
A
2
,
⋯
,
A
n
A_1,A_2,\cdots,A_n
A1,A2,⋯,An中的一部分,则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在属性列A上诸分量的集合,
A
‾
\overline{A}
A表示
{
A
1
,
A
2
,
⋯
,
A
n
}
\{A_1,A_2,\cdots,An \}
{A1,A2,⋯,An}中去掉
{
A
i
1
,
A
i
2
,
c
d
o
t
s
,
A
i
k
}
\{A_{i1},A_{i2},cdots,A_{ik}\}
{Ai1,Ai2,cdots,Aik}后剩余的属性组
3)R为n目关系,S为m目关系。
t
r
∈
R
,
t
s
∈
S
t_r \in R,t_s \in S
tr∈R,ts∈S,
t
r
t
s
‾
\overline{t_rt_s}
trts称为元组的连接或元组的串接。它是一个n+m列的元组,前n个分量为R中的一个n元组,后m个分量为S中的一个m元组。
4)给定一个关系R(X,Z),X和Z为属性组。当
t
[
X
]
=
x
t[X]=x
t[X]=x时,x在R中的象集(images set)定义为
Z
x
=
{
t
[
Z
]
∣
t
∈
R
,
t
[
X
]
=
x
}
Z_x=\{t[Z]|t \in R, t[X]=x \}
Zx={t[Z]∣t∈R,t[X]=x}它表示R中属性组X上职位x的诸元组在Z上分量的集合。
选择(selection)
选择又称为限制(restriction)。它是在关系R中选择满足给定条件的诸元组,记作$\sigma_F®={t|t \in R \wedge F(t)=‘真’ } $,其中F表示选择条件,他是一个逻辑表达式,取逻辑值“真”或“假”。
投影(projection)
在关系R上的投影是从R中选择出若干属性列组成的新的关系,记作
∏
A
(
R
)
=
{
t
[
A
]
∣
t
∈
R
}
\prod_A(R)=\{t[A] | t \in R \}
∏A(R)={t[A]∣t∈R}其中A为R中的属性列。
投影操作是从列的角度进行运算。
连接(join)
连接也称为
θ
\theta
θ连接。它是从两个关系的笛卡尔积中选取属性间满足一定条件的元组,记作
R
⋈
A
θ
B
S
=
{
t
r
t
s
‾
t
r
∈
R
∧
t
s
∈
S
∧
t
r
[
A
]
θ
t
s
[
B
]
}
R \Join_{A \theta B} S=\{\overline{t_rt_s} t_r \in R \wedge t_s \in S \wedge t_r[A]\theta t_s[B] \}
R⋈AθBS={trtstr∈R∧ts∈S∧tr[A]θts[B]}
其中,A和B分别为R和S上列数相等且可比的属性组,
θ
\theta
θ是比较运算符。连接运算从R和S的笛卡尔积
R
×
S
R \times S
R×S中选取R关系在A属性组上的值与S关系在B属性组上的值满足比较关系
θ
\theta
θ的元组。
除运算(division)
设关系R除以关系S的结果为关系T,则T包含所有在R但不在S中的属性及其值,且T的元组与S的元组的所有组合都在R中。
R与S的除运算得到一个新的关系P(X),P是R中满足条件的元组在X属性上的投影:元组在X上分量值x的象集
Y
x
Y_x
Yx包含S在Y上投影的集合。记作
R
÷
S
=
{
t
r
[
X
]
∣
t
r
∈
R
∧
∏
Y
(
S
)
⊆
Y
x
}
R \div S=\{t_r[X]|t_r \in R \wedge \prod_Y(S) \subseteq Y_x \}
R÷S={tr[X]∣tr∈R∧∏Y(S)⊆Yx},其中
Y
x
Y_x
Yx为x在R中的象集,
x
=
t
r
[
X
]
x=t_r[X]
x=tr[X]