2020年中级数据库系统工程师考试笔记7—关系数据库1

  本章内容较多且都很重要分2次总结,上午选择题和下午题都有涉及,是每年必考知识,且实际工作中这部分也是必须掌握的知识。

7. 关系数据库

7.1 本章考点

在这里插入图片描述

7.2 关系数据库概述

7.2.1 基础知识

1.关系:关系数据库中,实体以及实体间的联系用关系来表示。

2.关系模式:是对关系的描述。

3.关系模型:是由若干个关系模式组成的集合。

4.属性:描述事物的特征,比如学生的学号、姓名、性别等。

5.域:每个属性的取值范围所对应的一个值的集合,比如性别的域为{男,女}。

6.目或度:R表示关系的名字,n是关系的目或度。

7.元组:简单的来说就是一个表中的一行数据,比如学生表中学生A的数据信息。

8.候选码:若关系中的某一属性或属性组的值能唯一的标识一个元祖,则该属性或属性组为候选码,比如学生的学号、手机号、身份证号都是候选码。

9.主码:或称为主键,若一个关系有多个候选码,则选定其中一个为主码,比如学生表中学号作为主键。

10.主属性:包含在任何候选码中的诸属性成为主属性,不包含在任何候选码中的属性成为非主属性。

11.外码(简单来说就是表中的外键):如果关系模型R中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。例如客户与贷款之间的借贷关系c-l(cid,loadno),属性cid是客户关系中的码,所以cid是外码,属性loanno是贷款关系中的码,所以loadno也是外码。

12.全码:关系模型中的所有属性组是这个关系模式的候选码,称为全码。例如,关系模式R(T,C,S),属性T表示教师,C表示课程,S表示学生,假如一个教师可以教授多门课程,某门课程可以多个教师教授,学生可以听不提交时讲授不同的课程,那么相区分关系中的每一个元组,这个关系模式R的码应为全属性T,C和S,即All-key。

13.元组/记录:行数据,一行就是一个元组或者说一条记录

14.字段、数据项:列

15.元数:属性的个数(列数)

16.基数:记录的个数(行数)

17.n元关系:元数为几,就是几元关系。

  

7.2.2 关系数据库模式

  关系的描述成为关系模式: R ( U , D , d o m , F ) R(U,D,dom,F) R(U,D,dom,F),R表示关系名,U是组成该关系的属性名集合,D是属性的域,dom是属性区域的映像集合,F为属性间数据的依赖关系集合,通常简记为 R ( U ) R(U) R(U) R ( A 1 , A 2 , … , A n ) R(A_1,A_2,…,A_n) R(A1,A2,,An) A 1 , A 2 , … , A n A_1,A_2,…,A_n A1,A2,,An为属性名。

  例如:学生关系S有学号Sno、学生姓名Sname,系名SD,年龄SA属性,课程关系C有课程号Cno、课程名Cname、先行课称号PCno属性;学生选课关系SC有学号Sno、课程号Cno、成绩Grade属性,定义关系模式及主码:

  • 学生关系模式S(Sno,Sname,SD,SA)
  • 课程关系模式C(Cno,Cname,Pno),dom(PCno)=Cno
  • 学生选课关系模式SC(Sno,Cno,Grade)
    关系的三种模型:基本关系、查询表、视图表(虚表,数据库只存放其定义)。

  关系的完整性约束:

  • 实体完整性:基本关系R的主属性不能取空值。
  • 参照完整性:比如企业部门关系模式和员工关系模式中Emp(员工号,姓名,性别,参加工作时间,部门号)和Dept(部门号,名称,电话,负责人),安装参照完整性原则Emp表中的部门号取值必须参照Dept表中的部门号的值,下划实线表示主码属性(主键),下划虚线(这里用绿色字体表示)表示外码属性(外键)。
  • 用户定义完整性:针对某一具体的关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求,比如定义某一列值的取值范围。

7.2.3 关系代数运算

  关系代数运算包括:集合运算符、专门的关系运算符、算数比较符合逻辑运算符。
在这里插入图片描述
1.并

  关系R与S具有相同的关系模式,即R与S的元数相同(结构相同),R与S的并是属于R或者属于S的元组构成的集合,记作R∪S,定义如下:
R ∪ S = { t ∣ t ∈ R ∨ t ∈ S } R∪S=\{t|t∈R∨t∈S\} RS={ ttRtS}
在这里插入图片描述
2.差

  关系R与S具有相同的关系模式,关系R与S的差是属于R但不属于S的元组构成的集合,记作R−S,定义如下:
R − S = { t ∣ t ∈ R ∨ t ∉ S } R−S=\{t|t∈R∨t∉S\} RS={ ttRt/S}
在这里插入图片描述
3.广义笛卡尔积(Extended Cartesian Product)

  两个无数分别为n目和m目的关系R和S的笛卡尔积是一个(n+m)列的元组的集合。组的前n列是关系R的一个元组,后m列是关系S的一个元组,记作R×S,定义如下:
R × S = t ∣ t = < t n , t m > ∧ t n ∈ R ∧ t m ∈ S R×S={t|t=<t^n,t^m>∧t^n∈R∧t^m∈S} R×S=tt=<tn,tm>tnRtmS

   < t n , t m > <t^n,t^m> <tn,tm>表示元素 t n t^n tn t m t^m tm拼接成的一个元组.
在这里插入图片描述
4.投影(Projection)

  投影运算是从关系的垂直方向进行运算,在关系R中选出若干属性列A组成新的关系,记作 π A ( R ) π_A(R) πA(R),其形式如下:
π A ( R ) = { t [ A ] ∣ t ∈ R } π_A(R)=\{t[A]|t∈R\} πA(R)={ t[A]tR}
在这里插入图片描述
5.选择(Selection)

  选择运算是从关系的水平方向进行运算,是从关系R中选择满足给定条件的元组,记作 σ F ( R ) σ_F(R) σF(R),其形式如下:
σ F ( R ) = { t ∣ t ∈ R ∧ F ( t ) = T r u e } σ_F(R)=\{t|t∈R∧F(t)=True\} σF(R)={ ttRF(t)=True}

  其中,F中的运算对象是属性名(或列的序号)或常数,运算符、算数比较符(<、>、≥、≤、≠)和逻辑运算符(∨、∧、¬)。

  例如, σ 1 ≥ 6 ( R ) σ_{1≥6}(R) σ16(R)表示选取关系R中第1个属性值大于等于第6个属性值的元素; σ 1 > ′ 6 ′ ( R ) σ_{1>'6'}(R) σ16(R)表示选取关系R中第1个属性值大于6的元组。

  注意:6和‘6’的区别,6是指从左往右数第6个属性,‘6’是指数字6(数值格式或文本格式)。

  例题:设有关系R、S如图所示,求R∪S、R−S、R×S、 π A , C ( R ) π_{A,C}(R) πA,C(R) σ A > B ( R ) σ_{A>B}(R) σAB(R) σ 3 < 4 ( R × S ) σ_{3<4}(R×S) σ34(R×S)
在这里插入图片描述
  解答:
在这里插入图片描述
在这里插入图片描述

6.扩展的关系运算

  扩展的关系运算可以从基本的关系运算中导出,主要包括:选择、投影、连接、除法、广义笛卡尔积、外连接、

(1)交

  关系R和S具有相同的关系模式,交是由属于R同时双属于S的元组构成的集合,记作R∩S,形式如下:
R ∩ S = { t ∣ t ∈ R ∧ t ∈ S } R∩S=\{t|t∈R∧t∈S\} RS={ ttRtS}

  例题:关系R、S如下,求R∩S。
在这里插入图片描述
(2)连接(⋈)

  从R与S的笛卡尔积中选取属性间满足一定条件的元组,可由基本的关系运算笛卡尔积和选取运算导出,连接分为θ连接、等值连接以及自然连接。

  • θ连接

  θ连接可以表示为:
R ⋈ X θ Y S = σ X θ Y ( R × S ) R\underset{XθY}{⋈}S=σ_{XθY}(R×S) RXθYS=σXθY(R×S)

  其中的为比较运算符,如>、<、=、≠。X和Y分别为R和S上可以进行比较的属性组。
例如:设有关系R、S如图所示,求 R ⋈ R . A < R . B S R\underset{R.A<R.B}{⋈}S RR.A<R.BS
在这里插入图片描述

  解:本题的连接条件为R.A<S.B(S.B等于6/8满足条件),也就是R关系中属性A的值小于S关系中属性B的值的元组取出来作为结果集的原则,结果集为R×S后选出满足条件的原元组。
在这里插入图片描述

  • 等值连接:当θ为“=”时,称为等值连接,记为 R ⋈ X = Y S R\underset{X=Y}{⋈}S RX=YS

  例如:设有关系R、S如图所示,求 R ⋈ R . A = R . C S R\underset{R.A=R.C}{⋈}S RR.A=R.CS
在这里插入图片描述

  • 自然连接:是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉(事实上就是两个表连接查询去除冗余列)。

  例如:设有关系R、S如图所示,求 R ⋈ S R⋈S RS
在这里插入图片描述

  去除相同属性列最终得出 R ⋈ S R⋈S RS如下:
在这里插入图片描述
(3)除:同时从关系的水平方向和垂直方向进行运算。

  解:根据除法定义,此题的X属性为AB,Y属性为CD,R÷S应当满足元组在属性AB上的分量值x的象集 Y x Y_x Yx包含关系S在CD上投影的集合。
在这里插入图片描述

(4)外连接(与SQL连表查询里的连接概念一致)

  外连接运算是连接运算的扩展,可以处理缺失的信息。

  • 左外连接⟕(左侧为准,右侧填充):取出左侧关系中所有与右侧关系中任一元组都不匹配的元组,用空值null填充所有来自右侧关系的属性,构成新的元组,将其加入自然连接的结果集中。
    在这里插入图片描述
  • 右外连接⟖(右侧为准,左侧填充):取出右侧关系中所有与左侧关系中任一元组都不匹配的元组,用空值null填充所有来自左侧关系的属性,构成新的元组,将其加入自然连接的结果中。
    在这里插入图片描述
  • 全外连接⟗:完成左外连接和右外连接的操作(相当于左外连接与右外连接的union操作)。
    在这里插入图片描述
      总结如下(来自紫依视频总结):
    在这里插入图片描述

7.3 元组演算、域演算和查询优化

7.3.1 元组演算

  元组演算是非过程化查询语言,它只描述所需信息,而不给出获得该信息的具体过程。在元组演算中,其元组关系演算表达式中的变量是以元组为单位的,其一般形式为:{t|P(t)},其中t是元组变量,P(t)是元祖关系演算公式,公式是由原子公式组成的。

1.原子公式

  (1)R(t):R是关系名,t是元组变量,R(t)表示t是R中的元组。

  (2)t[i]θC或Cθt[i]:t[i]表示元祖变量t的第i个分量,c是常量,θ是算术比较运算符,该公式表示“t的第i个分量与常量C满足比较关系θ”,例如:t[4]=3表示元组t的第4个分量等于3。

  (3)t[i]θu[j]:t和u是元组变量,θ是算术比较运算符,t[i]θu[j]表示“元组t的第i个分量与元组u的第j个分量满足比较关系θ”,例如,t[2]<u[3]表示元组t的第2个分量小于元组u的第3个分量。

2.公式的定义

  若一个公式中的一个元祖变量前有全称量词∀(All首字母倒写?)或存在量词∃(Exist首字母反写?)符号,则该变量为约束变量,否则成为自由变量,公式可递归定义如下:

  (1)每个原子公式是公式。

  (2)如果φ1和φ2是公式,则φ1∧φ2(交)、φ1∨φ2(并)、φ1⟹φ2,﹁φ1也是公式,分别表示:

如果φ1和φ2同时为真,则φ1∧φ2才为真,否则为假;

如果φ1和φ2中一个或同时为真,则φ1∨φ2为真,仅φ1和φ2同时为假时,φ1∨φ2才为假;

φ1φ2表示若φ1为真则φ2为真。

如果φ1真,则﹁φ1为假。

  (3)若φ1是公式,则∃t(φ1)也是公式,其中符号∃是存在量词符号,∃t(φ)表示:若有一个t使φ1为真,则∃t(φ1)为真,否则∃t(φ1)为假。

  (4)若φ1是公式,则∀t(φ1)也是公式,其中符号∀是全称量词符号,∀t(φ1)表示:如果对所有t,都使φ1为真,则∀t(φ1)必为真,否则∀t(φ1)为假。

  (5)在元组演算公式中,各种运算符的优先次序为:

算术比较运算符最高;

量词次之,且∃的优先级高于∀的优先级;

逻辑运算符最低,且﹁的优先级高于∧的优先级,∧的优先级高于∨的优先级;

加括号时,括号中运算符优先,同一括号内的运算符之优先级遵循①②③各项。

7.3.2 关系代数运算转换为元组演算表达式

  有限次地使用上述五条规则得到的公式是元组关系演算公式,其他公式不是元组关系演算公式。关系代数的运算均可以用关系演算表达式来表示(反之亦然),下面用关系演算表达式来表示五种基本运算:

1.并:R∪S={t|R(t)∨S(t)}
2.差:R-S={t|R(t)∧﹁S(t)}
3.笛卡尔积(R有n个属性,S有m个属性):
R × S = { t ( n + m ) ∣ ( ∃ u ( n ) ) ( ∃ v ( m ) ) ( R ( u ) ∧ S ( v ) ∧ t [ 1 ] = u [ 1 ] ∧ . . . ∧ t [ n ] = u [ n ] ∧ t [ n + 1 ] = v [ 1 ] ∧ . . . ∧ t [ n + m ] = v [ m ] ) } R×S=\{t(n+m)|(∃u(n))(∃v(m))(R(u)∧S(v)∧t[1]=u[1]∧...∧t[n]=u[n]∧t[n+1]=v[1]∧...∧t[n+m]=v[m])\} R×S={ t(n+m)(u(n))(v(m))(R(u)S(v)t[1]=u[1]...t[n]=u[n]t[n+1]=v[1]...t[n+m]=v[m])}
注:t(n+m)表示t有目数(n+m),即n+m个属性。
4.投影: π i 1 , i 2 , . . . , i k ( R ) = { t ∣ ( ∃ u ) ( R ( u ) ∧ t [ 1 ] = u [ i 1 ] ∧ t [ i 2 ] = u [ i 2 ] ∧ . . . t [ k ] = u [ i k ] ) } π_{i1,i2,...,ik}(R)=\{t|(∃u)(R(u)∧t[1]=u[i_1]∧t[i_2]=u[i_2]∧...t[k]=u[i_k])\} πi1,i2,...,ik(R)={ t(u)(R(u)t[1]=u[i1]t[i2]=u[i2]...t[k]=u[ik])}
5.选择: σ F ( R ) σ_F(R) σF(R)={t|R(t)∧F}

  注:F是公式,F用t[i]代替运算对象i得到的等价公式。

  例题:设有关系R、S如图所示,对如下所示的元组演算表达是,求出它们的值。
在这里插入图片描述
(1)R1={t|R(t)⋀¬S(t)}
(2)R2={t|(∃u)(R(t)⋀S(u)⋀t[3]<u[2])}
(3)R3={t|(∀u)(R(t)⋀S(u)⋀t[3]>u[1])}
(4)R4={t|(∃u)(∃v)R(u)⋀S(v)⋀u[2]>v[1]⋀t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3])}

  解:
  (1)R1其实就是就R与S关系的差集,新生成的R1元组来自R但又不再S中。
  (2)R2元组来自关系R,同时R3的第三分量必须小于关系S中某个元组的第2分量值。
  (3)R3元组来自关系R,同时R3的第三分量必须大于关系S中所有元组的第一个分量值。
在这里插入图片描述
  (4)首先R4元组来自关系R和S且满足R元组的第二个分量值大于S某元祖的第一个分量值(u[2]>v[1]),另外t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3]表示R4的第一分量、第二分量和第三分量分别对应关系R的第一列u[1],S关系的第一列v[1],S关系的第三列v[3],

  首先找到R、S中u[2]>v[1]的结果集:
在这里插入图片描述

  再根据t[1]=u[1]⋀t[2]=v[1]⋀t[3]=v[3]获取R4各分量值:
在这里插入图片描述

7.3.3 域演算

  域关系演算简称域演算,在域演算中,表达式中的变量是表示域的变量,可将关系的属性名视为域变量。

  关系域演算公式的基本形式: { t 1 , t 2 , … , t k ∣ P ( t 1 , t 2 , … , t k ) } \{t_1,t_2,…,t_k|P(t_1,t_2,…,t_k)\} { t1,t2,,tkP(t1,t2,,tk)}

  其中, t 1 , t 2 , … , t k t_1,t_2,…,t_k t1,t2,,tk代表域变量或常量, P ( t 1 , t 2 , … , t k ) P(t_1,t_2,…,t_k) P(t1,t2,,tk)是演算公式。

偷个懒,截个图

在这里插入图片描述
  例:设有关系R、S如下,进行域演算表达式计算求值。
在这里插入图片描述
在这里插入图片描述
  解:
(1)R1的元组t来自关系R,且同时满足 t 1 < t 2 t_1<t_2 t1<t2(R.A<R.B)和 t 2 > t 3 t_2>t_3 t2>t3(R.B>R.C)。
(2)R2的元组t来自满足R、S条件的并集,其中关系R中的第一个分量值必须大于4(R.A>4),关系S的的第二个分量值必须小于8(S.B<8)。
(3)R3的元组 t 1 t_1 t1对应S的第一列(S.A), t 2 t_2 t2对应R的第二列(R.B), t 3 t_3 t3对应S的第三列(S.C),且要求R.A≥7(),R.C>S.B(v>w)。
在这里插入图片描述
7.3.4.查询优化

  查询优化是指为查询选择最有效的查询计划的过程。一个查询往往会有许多事先办法,关键是如何找出一个与之等价的且操作时间又少的表达式。在关系代数运算中,笛卡尔积、连接运算最费时间和空间。

  优化准则:
  1.提早执行选取运算,多表连接查询时,特别是有大表连接时,先选取满足条件的大表数据再去做表连接查询会更高效一些。
  2.合并乘积与其后的选择运算为连接运算
  3.将投影运算逾期后的其他运算同时进行,避免重复扫描关系
  4.将投影运算和其前后的二目运算结合起来,是的没有必要为去掉某些字段在扫描一遍关系。
  5.在执行连接前对关系适当的预处理,就能快速的找到要连接的元组,方法是索引连接法、排序合并连接法。
  6.存储公共子表达式。

  例题参详教材P-342的例7.14。

7.4 关系数据库设计基础理论

7.4.1 函数依赖

  定义:设R(U)是属性集U上的关系模式,X、Y是U的子集,弱队R(U)的任何一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数决定Y或Y函数依赖于X,记作X→Y。(有点类似于表用唯一索引列查询其他列的数据)

  • 如果X→Y,但Y⊊X,则称X→Y是非平凡的函数依赖。一般情况下总是讨论非平凡函数的依赖。
  • 如果X→Y,但Y⊆X,则称X→Y是平凡的函数依赖。

注意函数依赖X→Y的定义要求关系模式R的任何可能的r都满足上述条件,因此不能仅考察关系模式R在某一时刻的关系r,就断定某函数依赖成立。函数依赖是语义范畴的概念,我们只能根据语义来确定函数依赖。

  在R(U)中,如果X→Y,并且对于X的任何一个真子集 X ′ X^{'} X,都有 X ′ X^{'} X不能决定Y,则称Y对X完全函数依赖,记作 X ⟶ f Y X\stackrel{f}{\longrightarrow}Y XfY。如果X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作 X ⟶ p Y X\stackrel{p}{\longrightarrow}Y XpY,也称为局部函数依赖。

  例如:学生选课关系SC1(sno,cno,grade),我们可以得到F={(sno,cno)→grade},对于(sno,cno)中的sno或者cno都不能得到某学生某一课程的grade,所以grade完全依赖于sno,cno。

  学生选课关系SC1(sno,cno,sname,cname,grade)中,F={(sno,cno)→grade,(sno,cno)→sname,(sno,cno)→cname,sno→sname,cno→cname},其中的(sno,cno)→sname,(sno,cno)→cname就是部分依赖关系。

  在R(U,F)中,如果 X → Y , Y ⊊ X , Y ↛ X , Y → Z X→Y,Y⊊X,Y↛X,Y→Z XYYXYXYZ,则称Z对X传递依赖。

  例如:关系供应商(Sno,Sname,Status,City,Pno,Qty),及函数依赖集如下,判断该关系是否存在传递依赖和部分函数依赖。
在这里插入图片描述
  解:存在函数依赖,因为 S n o → S t a t u s , S t a t u s → C i t y Sno→Status,Status→City SnoStatusStatusCity,且Status⊊City,Status↛City,故Sno→City,也就是City对Sno传递依赖。

  (Sno,Pno)→(Sname,Status,City),但Sno→(Sname,Status,City),所以关系供应商存在Sname,Status,和City对(Sno,Pno)的部分依赖关系。

7.4.2 码

  设K为R(U,F)中的属性的组合,若K→U,且对于K的任何一个真子集 K ′ K{'} K,都有 K ′ K{'} K不能决定U,则K为R的候选码,多有多个候选码,则选一个作为主码。

  –简而言之,就是一个表中有多个唯一属性列,随便选一个都可以作为表的主键。

  候选码通常称为候选关键字,主码通常也称为主键或主关键字。任何一个候选码中的属性叫做主属性,否则成为非主属性,若关系的所有属性为码,该码成为全码。

  例如:选课关系SC(sno,cno,sname,cname,grade)中(sno,cno)可以决定该关系的全码,则(sno,cno)为候选码。

  若R(U)中的属性或属性组X非R的码,但X是另一个关系的码,则称X是R的外码或者外键。

  例如:员工表(员工号,姓名,部门号,职位,联系方式)中部门号就是外键,是关系部门(部门号、部门名,负责人)的码。

7.4.3 多值依赖

  若关系模式R(U)中,X,Y,Z是U的子集,并且Z=U-X-Y,当且仅当R(U)中的任何一个关系R,给定一堆(x,z)值,有一组Y的值,这组值仅仅决定与x值而与z值无关,则曾为“Y多只依赖于X”或“X多值决定Y”成立,记为X→→Y。

  –简言之,一个X值对应多个Y值,

  判定方法:一个表中如果有2行数据,记为A、B,如果他们的某一属性X的值相等,那么我们交换它们另外的属性Y的值后,得到的新的两行数据C、D,可以在原来的表中可以找到与C、D相匹配的行。

说明:
1.疏忽、遗漏、错误之处,欢迎留言批评指正。
2.第7章上部分总结完毕,后续会继续完善补充本章的历年真题,转载请注明出处,整理不易,谢谢!

猜你喜欢

转载自blog.csdn.net/u010257584/article/details/109742276