数据库基础教程 2、关系数据库模型——关系数据库基础
关系数据库结构
二维表与关系数据结构
二维表特点:
- 具有表名
- 由表头和若干航数据两部分构成
- 有若干列,每列都有列名
- 同一列的值必须取自同一个域
- 每一行的数据代表一个实体的信息
对二维表可以进行如下操作
- 查询数据
- 增加数据
- 修改数据
- 删除数据
关系数据模型中常见的术语:
- 关系。一个关系指一张二维表。
- 元组。一个元组指二维表中的一行。
- 属性。一个属性指二维表中的一列。
- 码。也称键、关键字、关键码,指表中可唯一确定元组的属性或属性集合。
- 域。指属性的取值范围。
- 分量。分量是指元组中的一个属性值。
- 关系模式。关系模式是对关系“型”的描述,通常表示为关系名(属性1,属性2,属性3,……属性n)。
关系数据结构的形式化定义
域
域是一组具有相同数据类型的值的集合,又称值域。
笛卡尔积
给定一组域$D_1,D_2,……,D_n$,理解为这些域中所有的元素的所有组合就行,当然,同域的元素组合后的结果不在同组。
写作$D_1\times D_2\times ……\times D_n$。
结果的组合个数即为所有域的元素个数相乘。
关系
笛卡尔积$D_1\times D_2\times ……\times D_n$的任意子集称为域$D_1,D_2,……,D_n$上的关系。
- 关系的元组个数为关系的基数。
- 关系是一个二维表,一行对应一个元组,一列来自于同一个域,必须为每列取一个名字,n元关系就有n个属性。
- 数学上,关系是笛卡尔积的任意子集;数据库系统中,关系是笛卡尔积中所取的有意义的有限子集。
关系的性质
- 每列的分量必须是同一类型的数据
- 不同的属性必须赋予不同的属性名
- 列的顺序可以任意交换,但必须连同属性名一起
- 任意两个元组不能完全相同
- 关系中元组的顺序可以任意
- 每个分量必须不可再分
关系模式
关系的描述称为关系模式,可以形式化地表示为:
$R(U,D,dom,F)$
其中,R为关系名,U为组成关系的属性名集合,D为属性集U中属性所来自的域,dom为属性与域之间的映像集合,F为属性间依赖关系的集合。
关系模式可以简化为$R(U)$
关系模式是静态的,关系是动态的,关系是关系模式在某一时刻的状态或内容。
码
候选码
设关系$R(A_1,A_2,……,A_n)$,其属性为$A_1,A_2,……,A_n$,属性集K为R的子集,$K=(A_i,A_j,……,A_k)$,$1\leq i,j,……,k\leq n$。当且仅当满足下列两个条件时,K被称为候选码。
- 唯一性,对任意两个元组,候选码不同。
- 最小性,属性集$K=(A_i,A_j,……,A_k)$是最小集,即若删除K中的任意属性,K都不满足唯一性。
主码
若一个关系有多个候选码,则从中选择一个作为主码。
包含在候选码中的各个属性被称为主属性,反之称为非主属性。
外码
如果关系$R_1$的属性或属性集K不是$R_1$的主码,而是另外一个关系$R_2$的主码,则称K为关系$R_1$的外码,并称关系$R_1$为参照关系,关系$R_2$为被参照关系。
关系操作
基本关系操作
- 数据查询操作作用于对关系数据进行各种检索。
- 数据更新操作包括删除、插入、修改三种方式。
关系数据语言分类
早期的关系操作通常用代数方式或逻辑方式来表示,分别称为关系代数和关系演算。
关系演算又可按谓词变量的不同分为元组关系演算和域关系演算两类。
关系代数
传统的集合运算
包括并、差、交和笛卡尔积运算,除了笛卡尔积外,都要求参与运算的两个关系满足“相容性”条件。
- 相容性:设两个关系R、S,若满足以下两个条件:1.具有相同的属性个数n;2.R中第i个属性和S中第i个属性来自同一个域,则称R、S满足相容性条件。
并
R、S所有元组合并,删去重复元组,组成一个新关系。记为$R\cup S=\{t|t\in R\vee t\in S\}$。可以用来插入新记录。
差
R中删除与S相同的元组,组成一个新关系。记为$R-S=\{t|t\in R\wedge \neg t\in S\}$。可以用来删除记录。
交
由既属于R又属于S的元组组成新的关系。记为$R\cap S=\{t|t\in R\wedge t\in S\}$。
- 并和差为基本运算,而交不是,因为$R\cap S=R-(R-S)$
广义的笛卡尔积记为$R\times S=\{\widehat{t_Rt_S}|t_R\in R\wedge t_S \in S\}$可以用于两个关系的连接操作。
专门的关系运算
几个新概念或记号
- 设关系模式为$R(A_1,A_2,…,A_n)$,它的一个关系为R,$t\in R$表示t是R的一个元组,$t[A_i]$则表示元组t中相对于属性$A_i$的一个分量。
- 若$A=(A_{i1},A_{i2},…,A_{ik})$,其中$A_{i1},A_{i2},…,A_{ik}$是$A_1,A_2,…,A_n$中的一部分,则A称为属性列或域列。$t[A]=\{t[A_{i1}],t[A_{i2}],…,t[A_{ik}]\}$表示元组t在A上各分量的集合。$\overline{A}$则表示$A_{i1},A_{i2},…,A_{ik}$中去掉$(A_{i1},A_{i2},…,A_{ik})$后剩余的属性组。
- 设n目关系R,m目关系S,$t_R\in R,t_S\in S,\widehat{t_Rt_S}$称为元组的连接(更圆滑一点),它是一个n+m列的元组,前n个分量属于R,后m个属于S。
- 给定一个关系R(X,Z),设X,Z为属性组,定义当t[X]=x时,x在R中的像集为$Z_x=\{t[Z]|t\in R,t[X]=x\}$,它表示R中的属性组X上值为x的各元组在Z上分量的集合。
以下定义选择、投影、连接、除法4个专门的关系代数运算。
选择运算
指根据一定的条件在给定的关系R中选取若干元组
$\sigma _F=\{t\in R\wedge F(t)=$’真’$\}$
其中$\sigma$为选择运算符,F为选择的条件
投影运算
关系R上的投影是从R中选取若干属性列组成新的关系
$\Pi _A(R)=\{t[A]|t\in R\}$
其中,A为R中的属性列,$\Pi$为投影运算符
连接运算
从两个关系的笛卡尔积中选取满足条件的元组,组成新的关系
$R\Join S=\{\widehat{t_Rt_S}|t_R\in R\wedge t_S \in S\wedge t_R[X]\theta t_S[Y]为真\}$
其中,$\Join$是连接运算符,$\theta$是算术比较运算符,$X\theta Y$为连接条件
- 自然连接:在等值连接($\theta$为=)下,把重复属性列去掉。相应属性名也必须相同(等值连接不需要)。
- 在自然连接时,把舍弃的元组也保留,在其他属性上填上空值,称为外连接,如只将左边R中舍弃的元组保存在结果中称为左外连接(空值在S),相反是右外连接(空值在R)
除法运算
设关系R(X,Y)与S(Y,Z),其中X、Y、Z为属性集合,R中的Y与S中的Y可以有不同的属性名但必须出自同一个域。R除以S的结果为P(X),P是满足下列条件的元组在X上的投影:元组在X上分量值x的像集$Y_x$包含S在Y上的投影。
$R\div S=\{t_R[X]|t_R\wedge \Pi _Y(S)\subseteq Y_X\}$
并,差,笛卡尔积,选择,投影为基本运算
数据完整性
实体完整性,参照完整性,用户定义完整性
实体完整性
指关系R中的主属性不能取空值
参照完整性
指被参照关系的主码和参照关系的外码必须定义在同一个域上,并且参照关系的外码取值只能是以下两种情形之一:1.取空值;2.取被参照主码的值。