第5章 数据库系统(选择|案例|论文)(重点★★★★★)

5.1 数据库管理系统1

数据库是长期存储在计算机内的、有组织的、可共享的数据集合,数据库系统是指在计算机信息系统中引入数据库后的系统,一般由数据库、数据库管理系统 (DataBaseManagement System,DBMS)、应用系统、数据库管理员(DataBase Administrator,DBA)和用户构成。

5.1.1 概述

数据库管理系统是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。用户通过 DBMS 访问数据库中的数据,数据库管理员也通过 DBMS 进行数据库的维护工作。DBMS 可以支持多个应用程序和用户用不同的方法在同时或不同时刻去建立、修改和询问数据库。大部分 DBMS提供数据定义语言(Data Definition Language,DDL)和数据操作语言(Data ManipulationLanguage,DML),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。

简单地说,数据库管理系统是一个能够提供数据录入、修改、查询的数据操作软件,具有数据定义、数据操作、数据存储与管理、数据维护、通信等功能,且能够允许多用户使用

5.1.2 三级划分法

5.1.2.1 三级模式(重点★★★★★)

三级模式 面向人群 内涵
外模式 用户(程序员和终端用户) 描述组成用户视图的各个记录的组成、相互关系、数据项的特征、数据的安全性和完整性约束条件
概念模式 数据库管理员 用以描述现实世界中的实体及其性质与联系,定义记录、数据项、数据的完整性约束条件及记录之间的联系
内模式 系统程序员 用以描述存储记录的类型、存储域的表示和存储记录的物理顺序,以及索引和存储路径等数据的存储组织
  • 外模式也称为子模式或用户模式,对应于用户级数据库。外模式用以描述用户(包括程序员和终端用户)看到或使用的那部分数据的逻辑结构,是数据库用户的数据视图,是与某一应用有关的数据的逻辑表示。用户根据外模式用数据操作语句或应用程序去操作数据库中的数据。外模式主要描述组成用户视图的各个记录的组成、相互关系、数据项的特征、数据的安全性和完整性约束条件。一个数据库可以有多个外模式,一个应用程序只能使用一个外模式。

  • 概念模式也称为模式或逻辑模式,对应于概念级数据库。概念模式是数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图,用以描述现实世界中的实体及其性质与联系,定义记录、数据项、数据的完整性约束条件及记录之间的联系。概念模式通常还包含访问控制、保密定义和完整性检查等方面的内容,以及概念/物理之间的映射。一个数据库只有一个概念模式。

  • 内模式对应于物理级数据库,是数据物理结构和存储方式的描述,是数据在数据库内部的表示方式。内模式不同于物理层,它假设外存是一个无限的线性地址空间。内模式定义的是存储记录的类型、存储域的表示和存储记录的物理顺序,以及索引和存储路径等数据的存储组织。一个数据库只有一个内模式。

    在数据库系统的三级模式中,模式是数据库的中心与关键:内模式依赖于模式,独立于外模式和存储设备;外模式面向具体的应用,独立于内模式和存储设备;应用程序依赖于外模式,独立于模式和内模式。

5.1.2.2 两级独立性(次重点★★★☆☆)

两级独立性 内涵
物理独立性 用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的。物理独立性存在于概念模式和内模式之间的映射转换。
逻辑独立性 用户的应用程序与数据库中的逻辑结构是相互独立的,当数据的逻辑结构改变时,应用程序不需要改变。逻辑独立性存在于外模式和概念模式之间的映射转换。

数据库系统的两级独立性是指物理独立性和逻辑独立性。三个抽象级别之间通过两级映射(外模式/模式映射和模式/内模式映射)进行相互转换,使得数据库的三级模式形成一个统一的整体。
物理独立性是指用户的应用程序与存储在磁盘上的数据库中的数据是相互独立的,当数据的物理存储改变时,应用程序不需要改变。物理独立性存在于概念模式和内模式之间的映射转换,说明物理组织发生变化时应用程序的独立程度。
逻辑独立性是指用户的应用程序与数据库中的逻辑结构是相互独立的,当数据的逻辑结构改变时,应用程序不需要改变。逻辑独立性存在于外模式和概念模式之间的映射转换,说明概念模式发生变化时应用程序的独立程度。相对来说,逻辑独立性比物理独立性更难实现

5.1.3 数据模型

数据模型是现实世界数据特征的抽象。通过这种抽象,可以将现实世界的问题转化到计算机上进行分析与解决。数据模型所描述的内容包括3个部分,分别是数据结构、数据操作和数据约束。其中,数据结构主要描述数据的类型、内容、性质和数据间的联系等。数据结构是数据模型的基础,数据操作和数据约束都建立在数据结构上。不同的数据结构具有不同的操作和约束。数据操作主要描述在相应的数据结构上的操作类型和操作方式。数据约束主要描述数据结构内数据间的语法和词义联系、它们之间的制约和依存关系,以及数据动态变化的规则,以保证数据的正确、有效和相容。人们提出过很多种基本数据模型,其中最著名的有层次模型、网状模型、关系模型和面向对象模型。

  1. 层次模型

    层次模型是最早出现的数据模型,由于它采用了树状结构作为数据的组织方式,在这种结构中,每一个结点可以有多个孩子结点,但只能有一个双亲结点,这样,整体结构也是分层状的,所以称其为层次模型。

  2. 网状模型

    用有向图表示实体类型和实体之间的联系。网状模型的优点是记录之间的联系通过指针实现,多对多的联系容易实现,查询效率高;其缺点是编写应用程序比较复杂,程序员必须熟悉数据库的逻辑结构。由图和树的关系可知,层次模型是网状模型的一个特例。

  3. 关系模型

    用表格结构表达实体集,用外键表示实体之间的联系。关系模型建立在严格的数学概念基础上,概念单一、结构简单、清晰,用户易懂易用:存取路径对用户透明,从而数据独立性和安全性好,能简化数据库开发工作。其缺点主要是由于存取路径透明,查询效率往往不如非关系数据模型。关系模型是目前应用最广泛的一种数据模型,例如,Oracle、DB2、SQL Server、Sybase和MySOL 等都是关系数据库系统。

  4. 面向对象模型

    用面向对象的观点来描述现实世界实体的逻辑组织、对象之间的限制和联系等的模型。目前,已有多种面向对象数据库产品,例如,ObjectStore、Versant Developer、Suite Poet和 Obiectivity 等,但其具体的应用并不多。目前主流的方式是在现有的关系模型数据库系统中增加对对象模型的支持,如 Oracle 等。

5.2 关系数据库

关系数据库是目前应用非常广泛的数据库之一,有一套完整的理论做支持。关系模型是关系数据库的基础,由关系数据结构、关系操作集合和关系完整性规则三部分组成。本节介绍关系模型的基本概念、关系代数和关系演算以及关系规范化理论方面的内容。

5.2.1 关系的基本概念

术语 描述
关系(表文件) 一个二维表,由行和列组成,对应数据库中的一张表。
元组(记录) 表中的一行,代表一个元组或一条记录。
属性(字段)(Attribute) 描述一个事物的特征,可以理解为二维表中的每一列,定义了数据的意义和数据类型,在数据库中经常被称为字段。
域 (Domain) 每个属性的取值范围所对应的值的集合,称为该属性的域。定义了字段可以存储的数据类型和可能的值。一般在关系数据模型中,对域还加了一个限制,所有的域都应是原子数据 (Atomic Data)。例如,整数、字符串是原子数据,而集合、记录、数组是非原子数据。
属性值 行和列交叉点的值,代表特定记录的特定属性的具体数据。
候选码(Candidate Key) 若关系中的某一属性或属性组的值能唯一地标识一个元组.则称该属性或属性组为候选码。
主码 (Primary Key) 或称主键,若一个关系有多个候选码,则选定其中一个为主码,用于唯一确定表中一个元组的数据,可以是一个或多个字段。
主属性 (Prime Attribute) 包含在任何候选码中的属性称为主属性。不包含在任何候选码中的属性称为非主属性(Nonprime Attribute)。
外码(Foreign Key) 如果关系模式R 中的属性或属性组非该关系的码,但它是其他关系的码,那么该属性集对关系模式R而言是外码。
全码 (A11-key) 关系模型的所有属性组是这个关系模式的候选码,称为全码。例如,关系模式 R (T,C,S),属性 T表示教师,属性 C表示课程,属性 S表示学生。假设一个教师可以讲授多门课程,某门课程可以由多个教师讲授,学生可以听不同教师讲授的不同课程,那么,要想区分关系中的每一个元组,这个关系模式R的码应为全属性T、C和 S,即 All-key。
目或度 (Degree) 二维表关系R (D1,D2,···Dn,)中的R表示关系的名字,n是关系的目或度
关系模式 关系的逻辑描述,一般表示为:关系名(属性 1,属性 2,...,属性 n)。

5.2.2 关系模型

在关系模型中,实体以及实体间的联系都是用关系来表示的。在一个给定的现实世界领域中,所有实体及实体间的联系的关系的集合构成了一个关系数据库。关系的描述称为关系模式,关系模式通常可以简记为R(A,A,··,A),其中R为关系名,A、A、··、A为属性名。关系实际上就是关系模式在某一时刻的状态或内容。也就是说,关系模式是型,关系是它的值。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。但在实际应用中,通常将关系模式和关系统称为关系,读者可以从上下文中加以区别。

5.2.2.1 关系运算(次重点★★★☆☆)

运算符 含义 解释 形式定义
U 关系R与S的并是由属于R或属于S的元组构成的集合 t是元组变量,关系R和S(两者有相同元/列数)
- 关系R与S的差是由属于R但不属于S的元组构成的集合 关系R和S(两者有相同元/列数)
关系R与S的交是由属于R同时又属于S的元组构成的集合 关系R和S(两者有相同元/列数)
× 笛卡尔积 计算两个关系的笛卡儿乘积,令R为有 m 元的关系,S为有n元的关系,则 RXS是 m+n 元的元组的集合,其前m 个元素来自 R的一个元组,而后n 个元素来自 S的一个元组。若R有u 个元组,S有v个元组,则 RXS有uXv个元组。
π 投影 从一个关系中抽取指明的属性(列)。令R为一个包含属性 A 的关系。
σ 选择 从关系 R 中抽取出满足给定限制条件的记录。 其中,F表示选择条件,是一个逻辑表达式(逻辑运算符+ 算术表达式)。选择运算是从元组(行)的角度进行的运算。
θ连接 θ连接 从两个关系的笛卡儿积中选取属性之间满足一定条件的元组 其中,A和 B 分别为 R和S上元数相等且可比的属性组。
等值连接 等值连接 当 θ为"="时,称为等值连接,关系R、S,取两者笛卡尔积中属性值相等的元组
自然连接 自然连接 自然连接是一种特殊的等值连接,它要求两个关系中进行比较的分量必须是相同的属性组,并且在结果集中将重复属性列去掉
左外连接 左外连接 R和S进行自然连接时,只把R中舍弃的元组放到新关系中
右外连接 右外连接 R和S进行自然连接时,只把S中舍弃的元组放到新关系中
完全外连接 完全外连接 R和S进行自然连接时,只把R和S中舍弃的元组都放到新关系中
设有关系 R(X,Y)与关系 S(Z),Y和Z具有相同的属性个数,且对应属性出自相同域。关系R(X,Y)÷S(Z) 所得的商关系是关系R在属性X上投影的一个子集,该子集和 S(Z)的笛卡儿积必须包含在 R(X,Y) 中,记为 R÷S(除法比较复杂。可看后面的例子,确实取法理解,考到就放弃)

R

A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1

S

A B C
a1 b2 c2
a1 b3 c2
a2 b2 c1

R U S

A B C
a1 b1 c1
a1 b2 c2
a2 b2 c1
a1 b3 c2

R - S

A B C
a1 b1 c1

R ∩ S

A B C
a1 b2 c2
a2 b2 c1

R × S

自然连接、左外连接、右外连接、完全外连接

5.2.2.2 元组演算(次重点★★★☆☆)

在元组演算中,元组演算表达式简称为元组表达式,其一般形式为 {t | P(t)},其中,t是元组变量,表示一个元数固定的元组:P(t)是公式,在数理逻辑中也称为谓词,也就是计算机语言中的条件表达式。{tP(t)} 表示满足公式 P 的所有元组t的集合。

在元组表达式中,公式由原子公式组成,原子公式有下列两种形式:

(1) R(s),其中 R是关系名,s 是元组变量。其含义是"s 是关系R的一个元组"。

(2) s[i]θu[j],其中s和u是元组变量,θ是算术比较运算符,s[i]和u[j]分别是s的第i个分量和 u 的第j个分量。原子公式s[i] θ u[j] 表示"元组s的第i个分量与元组 u的第j个分量之间满足 θ运算"。例如,t[2]<u[3]表示元组 t的第2 个分量小于元组 u的第3 个分量。这个原子公式的一种简化形式是s[i] θa 或aθu[j],其中a为常量。例如,t[4]=3 表示t的第4个分量等于 3。

在一个公式中,如果元组变量未用存在量词"∃"或全称量词"∀ "等符号定义,那么称为自由元组变量,否则称为约束元组变量。公式的递归定义如下:

(1) 每个原子是一个公式,其中的元组变量是自由变量。

(2) 如果P1和P2是公式,那么,¬P、P1VP2、P1A P2和P1→P2也是公式。

(3)如果 P1 是公式,那么(∃ s)(P1)和(∀ s(P1)也都是公式。

(4)公式中各种运算符的优先级从高到低依次为 θ、∃和∀、¬、⋀和V、→。在公式外还可以加括号,以改变上述优先顺序。

(5)公式只能由上述 4种形式构成,除此之外构成的都不是公式。

在元组演算的公式中,有下列 4 个等价的转换规则;

(1) P1 ⋀ P2 等价于¬(¬P1 V ¬P2)。

(2) P1 V P2,等价于¬(¬P1 ⋀ ¬P2)。

(3) (∀ s)(P1(s))等价于¬(∃ s)( ¬P1(s));(∃ s(P1(s))等价于¬(∀ s)(¬ P1(s))

(4) P1→P2等价于¬P1 V P2。

关系代数表达式可以转换为元组表达式,例如,RUS可用 {t | R(t) V S(t)}表示,R-S可用 {t | R(t) ⋀ ¬ S(t)}表示。

R

A B C
1 2 3
4 5 6
7 8 9
10 11 12

S

A B C
3 7 11
4 5 6
5 9 13
6 10 14

R1={t|R(t)⋀¬S(t)},找出在 R 中,但是不在 S 中的元组。

A B C
1 2 3
7 8 9
10 11 12

R2={t|S(t)⋀t[3]>t[2]⋀t[2]<8},找出在 S 中,且第三列分量大于第二列分量且第二列分量小于 8 的元组

A B C
3 7 11
4 5 6

R3={t|(∃u)(R(t)⋀S(u)⋀t[3]<u[2])}读作找出关系 R 中在第三列分量上小于任意在 S 中的元组在第二列分量的所有元组。

A B C
1 2 3
4 5 6
7 8 9

R4={t|(∀u)(R(t)⋀S(u)⋀t[3]>u[1])}找出在关系 R 中的,且在第三列分量上大于所有 S 中元组在第一列分量上的所有元组。

A B C
7 8 9
10 11 12

5.2.3 规范化理论(重点★★★★★)

5.2.3.1 规范化意义(重点★★★★★)

不规范化带来的四大问题:设有一个关系模式 R(SNAME,CNAME,TNAME,TADDRESS),其属性分别表示学生姓名选修的课程名、任课教师姓名和任课教师地址。仔细分析一下,就会发现这个模式存在下列异常问题:

(1)数据冗余。如果某门课程有 100 个学生选修,那么在 R的关系中就要出现 100 个元组这门课程的任课教师姓名和地址也随之重复出现 100 次。

(2)修改异常。由于上述冗余问题,当需要修改这个教师的地址时,就要修改 100 个元组中的地址值,否则就会出现地址值不一致的现象。

(3)插入异常。如果不知道听课学生名单,这个教师的任课情况和家庭地址就无法进入数据库,否则就要在学生姓名处插入空值。

(4)删除异常。如果某门课程的任课教师要更改,那么原来任课教师的地址将随之丢失,因此,关系模式R 虽然只有 4个属性,但却是性能很差的模式。产生这些异常的原因与关系模式属性值之间的联系直接相关。在关系模式 R 中,学生与课程有直接联系,教师与课程有直接联系,而教师与学生无直接联系,这就产生了关系模式 R 的异常问题。如果将 R分解成下列两个关系模式,即 R1(SNAME,CNAME)和 R2(CNAME,TNAME,TADDRESS),则能消除上述的存储异常现象。

5.2.3.2 函数依赖与键(重点★★★★★)

5.2.3.2.1 函数依赖(重点★★★★★)

是数据库的一种约束,决定了关系模式属于哪种范式。

例如:关系模式Student(Sno,Sdept,Mname,Cno,Grade)

名称 定义
完全函数依赖 (Sno,Cno)→Grade 是完全函数依赖。
部分函数依赖 (Sno,Cno)→Sdept是部分函数依赖。
传递依赖依赖 Sno→Sdept,Sdept→Mname,则称Sno传递依赖于Mname。

平凡函数依赖与非平凡函数依赖定义。不用记定义,直接看下面例子。

设职工关系(职工号,姓名,性别,年龄,职务)。

(职工号,性别)→职工号和(职工号,性别)→性别,都为平凡函数依赖。

(职工号,姓名)→性别和(职工号,姓名)→(年龄,职务),都为非平凡函数依

赖。

(记忆口诀,左右包含是平凡,左右互斥非平凡,若无子集是完全,若有子

集是部分,环环相扣是传递)

5.2.3.2.2 键(重点★★★★★)

关系模式的键也称为码或关键字。在关系模式中,若有多个候选键,则选一个作为主键。如果两个关系拥有公共属性(集),且公共属性在一个关系中是主键,则称公共属性是另一个关系的外键

名称 描述
超键 在关系中能唯一标识元组的属性集称为关系模式的超键。一个属性可以为作为一个超键,多个属性组合在一起也可以作为一个超键。例如学生关系模式中的(学号)、(身份证号)、(学号,姓名)、(身份证号、性别)等。
候选键 不含有多余属性的超键称为候选键,是超键的最小子集。例如,(学号)、(身份证号)
主键 用户挑选出来做元组标识的一个候选键称为主键。例如,我们通常选择(学号)作为主键
外键 如果关系模式R中的某些属性集不是R的主键,而是关系模式S的主键,则这个属性集对模式R而言是外键。例如,(教师编号)是学生关系模式的外键。
主属性 包含在任何一个候选键中的属性称为主属性,否则称为非主属性。

求关系模式的候选键是进行范式界定的基础,也是系统分析师应该掌握的基本技能。使用候选键的定义来求解一个简单关系模式的候选键尚能应对,但面对复杂一些的关系模式,这种方法就不管用了。在此,引入一种求候选键的快捷方法,即图示法。使用图示法求候选键,主要有两个步骤:

(1)将关系模式的函数依赖关系用有向图的方式表示,其中顶点表示属性,弧表示属性之

间的依赖关系。

(2)找出入度为0的属性集,并以该属性集为起点,尝试遍历有向图,若能正常遍历图中所有结点,则该属性集即为关系模式的候选键:若入度为0的属性集不能遍历图中所有结点则需要尝试性地将一些中间顶点(既有入度,也有出度的顶点)并到入度为 0的属性集中,直至该集合能遍历所有顶点,则该集合为候选键。

例如,给定关系R (A1,A2,A3,A4,) 上的函数依赖集{FA1→A2,A3→A2,A2→A3,A2→A4},现在要求 R 的候选键。需要针对函数依赖集画出有向图,如图 5-2 所示, 从图 5-2 中找出入度为 0的顶点,即 A。通过尝试,可以发现从A,出发可以遍历所有顶点,因此,R 的候选键为 4。

5.2.3.2.3 Armstrong公理(次重点★★★☆☆)

从已知的一些函数依赖,可以推导出另外一些函数依赖,这就需要一系列推理规则,这些规则常被称作"Armstrong 公理"。

设关系式R(U,F),U是关系模式R的属性集,F是U上一组函数依赖,则有以下三条推理规则:

A1自反律:若Y⊆X⊆U,则X→Y为F所蕴含;

A2增广律:若X→Y为F所蕴含,且Z⊆U,则XZ→YZ为F所蕴含;

A3传递律:若X→Y,Y→Z为F所蕴含,则X→Z为F所蕴含。

根据上面三条推理规则,又可推出下面三条推理规则:

合并规则:若X→Y,X→Z,则X→YZ为F所蕴含;

伪传递规则:若X→Y,WY→Z,则XW→Z为F所蕴含;

分解规则:若X→Y,Z⊆Y,则X→Z为F所蕴含。

假设我们有一个学生关系(学号,姓名,性别,年龄,所在专业)。

根据增广性规则,若学号→所在专业成立,则(学号,性别)→(所在专业,性别)也

必然成立。根据合并性规则,若学号→姓名和学号→性别成立,则学号→(姓名,性别)

也成立。根据分解性规则,学号→(姓名,性别)也成立,学号→姓名和学号→性别也

同样成立。

5.2.3.3 范式(重点★★★★★)

为了设计一个好的数据库,人们定义了一些好的关系模式标准称它们为规范的关系模式或范式(Normal Form,NF)。目前共定义了多个范式,分别为 1NF、2NF、3NF、BCNF、4NF 和 5NF。但在实际应用中,一般只要达到 3NF。

  • (1) 第一范式 (1NF)。在关系模式R中,当且仅当所有属性只包含原子值,即每个分量都是不可再分的数据项,则称 R满足 1NF。1NF存在冗余度大、引起修改操作不一致、插入异常、删除异常问题

  • 例如,如表 5-4 所示的教师职称情况关系就不满足1NF。原因在于,该关系模式中的"高级职称人数"不是一个原子属性
    如何规范化: 若将其拆分为"教授'和"副教授"两个属性,则满足 1NF。

  • (2) 第二范式 (2NF)。当且仅当关系模式 R满足 1NF,且每个非键属性(即不属于任何候选键的属性,也称为非主属性》完全依赖于候选键时,换句话说,当1NF消除了非
    主属性对码的部分函数依赖,则称 R 满足 2NF。

    例1:有选课关系模式SC(Sno,Cno,Grade,Credit),其中,(Sno,Cno)- Grade,Cno - Credit。因此,SC的候选键为(Sno,Cno)。

    Cno-Credit 就构成了 Credit 对候选键(Sno,Cno)的部分函数依赖。因此,SC不满足2NF。
    如何规范化:若要将SC转化为2NF,可以将它拆分为SC1 (Sno,Cno,Grade和 SC2 (Cno,Credit)。

    例2: 假定存在学生关系(学号,姓名,性别,所在专业,课程号,课程名,成绩),使其符合 2NF

    姓名,性别,所在专业部分函数依赖于(学号,课程号),不满足2NF
    如何规范化:由于这个学生实体和课程实体是多对多关系,根据多对多关系 ER 图到关系模式转换办法我们知道,就是把联系单独提出来形成一个关系。

    需将其分解为:

    学生(学号,姓名,性别,所在专业)。

    课程(课程号,课程名)。

    选课(学号,课程号,成绩)。

    经过分解,三个关系可以连接后仍得到原关系,且为无损分解和无损连接

  • (3)第三范式 (3NF)。 当且仅当关系模式 R 满足 2NF,且 R 中消除了非键属性传递依赖于候选键时,则称R满足3NF 。
    推论 1:如果关系模式 R∈1NF,且它的每一个非主属性既不部分依赖,也不传递
    依赖于任何候选码,则 R∈3NF。
    推论 2:不存非主属性的关系模式一定为 3NF(所有属性都是主属性)。

    例1:学生关系S(Sno,Sname,Dno,Dname,Location)的各属性分别代表学号、姓名、所在系、系名称和系地址,其数据如表 5-5 所示。

    从各属性之间的联系可以判断出S的函数依赖有 Sno→(Sname,Dno,Dname,Location),Dno→(Dname,Location)。显然,Sno 为候选键。

    在函数依赖中有Sno→Dno→Dname与Sno→Dno→Location,这便是传递函数依赖。由于Dname与Location 为非键属性,同时传递依赖于候选键,因此,关系模式S不满足 3NF。
    如何规范化: 若要使S满足 3NF,需要将其拆分为S1(Sno,Sname,Dno)利 S2(Dno,Dname,Location).

    例2:假定学生关系(学号,姓名,年龄,学校编号,学校地址,学校电话)

    因为(学号)→(姓名,年龄,学校编号,学院地点,学院电话)和(学号)→(学

    校编号)→(学校地址,学校电话)存在非主属性对候选码的传递函数依赖
    如何规范化:这里有两个联系分别是学生实体和学校,他们之间是一对多关系,一个学校对应多个学生,一个学生对应一个学校。实体根据前面一对多联系转换成关系模
    式的方法,我们有两种办法来做规范化

    要将学生关系表分为如下关系的两个表。

    学生(学号,姓名,年龄,学校编号)。

    学校(学校编号,地址,电话)。

    也可以分为三个表,把关系单独拿出来成表。

    学生(学号,姓名,年龄)。

    学校(学校编号,地址,电话)。

    管理(学号,学校编号)。

  • (4)BCNF。如果关系模式R满足 1NF,且R 中没有属性传递依赖于候选键时,也就是说,当3NF消除了主属性对码的部分函数依赖和传递函数依赖,称R满足 BCNF。例1:有关系模式 P(C,S,T,R),其函数依赖集F{C-T,ST-R,TR- C,现在需要判断P是否满足 BCNF。先画出相应的函数依赖图,如图 5-3 所示。

    对图 5-3 进行分析,可以得知,P的候选键有(S,T)和 (S,C),键属性(属于某个候选键的属性,也称为主属性)有 S、T和 C,非键属性只有 R。但此时由于属性之间的联系错综复杂,要界定关系模式是否存在传递函数依赖并不容易。为了准确地界定关系模式是否为 BCNF,需要引入一些另外的判别方法。例如,一个 BCNF 的关系模式必须同时满足以下条件:

    所有非键属性对每个候选键都是完全函数依赖的

    所有的键属性对每个不包含它的候选键也是完全函数依赖的

    没有任何属性完全函数依赖于非键属性=
    即每个函数依赖的左部都必须包含候选键,不能存在非码的属性。在关系模式 P中,由于有 C-T,而 C不包含候选键,因此,P不满足 BCNF。

    例2: 例如:关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程,假设每一教师只教一门课T→J。每门课由若干教师教,但某一学生选定某门课,就确定了一个固定的教师(S,J)→T;某个学生选修某个教师的课就确定了所选课的名称 (S,T)→J

    所以依赖关系:T→J,(S,J)→T,(S,T)→J

    候选键∶(S,J)和(S,T)STJ都是主属性

    不存在非主属性对码的部分函数依赖和传递依赖,STJ∈3NF。

    但是由于存在T→J,推论判断:因为T不是候选键,所以不是 BCNF 范式
    (如何规范化)

    将STJ(S,T,J)分解为:

    ① SJ(S,J),∈ BCNF。SJ的候选键为(S,J),这里属于all-key 。

    ② TJ(T,J)∈ BCNF。TJ的码为T,T→J。

  • (5)第四范式(4NF):第四范式是 BCNF 的推广,是针对有多值依赖的关系模型所定义的规范化形式。把一个表中多个多值依赖拆分开来。4NF是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

    例如:职工表(职工编号,职工孩子姓名,职工选修课程)

    在这个表中,同一个职工可能会有多个职工孩子姓名。同样,同一个职工也可能会有多个职工选修课程。由于存在两个多值依赖,就会导致表中数据冗余或者插入异常等其他问题。即这里存在着多值事实,不符合第四范式。
    (如何规范化)

    如果要符合第四范式,只需要将上表分为两个表,使它们只有一个多值事实,例如职工表 1(职工编号,职工孩子姓名),职工表 2(职工编号,职工选修课程),两个表都只有一个多值事实,所以符合第四范式

5.2.3.4 关系模式分解(次重点★★★☆☆)

如果某关系模式存在修改异常等问题,则可通过分解该关系模式来解决问题。将一个关系模式分解成几个子关系模式,需要考虑的是该分解是否保持函数依赖,是否是无损联接。

5.2.3.4.1 无损连接(次重点★★★☆☆)

无损连接是指分解后的关系通过自然连接可以恢复成原来的关系,即通过自然连接得到的关系与原来的关系相比,既不多出信息、又不丢失信息

无损联接分解的形式定义如下:设 R 是一个关系模式,F 是 R 上的函数依赖集。R 分解成数据库模式δ = {R1, . . . , Rk},如果对 R 中每个满足 F 的关系 r都有下式成立:r = πR1® ⊳⊲ πR2® ⊳⊲ . . . ⊳⊲ πRk®则称分解 δ相对于 F 是无损联接分解,否则称为损失联接分解。这里的⊳⊲表示自然连接

要根据上述定义来判断一个分解是否是无损联接,这是一件很困难的事情,下面是一个很有用的无损联接分解判定定理:设 ρ = {R1, R2}是 R 的一个分解,F 是 R 上的函数依赖集。那么分解ρ相对于F 是无损级联分解的充要条件(R1 ∩ R2) → (R1−R2)或(R1 ∩ R2) → (R2−R1)。要注意的是,这两个条件只要有任意一个条件成立就可以了

无损连接分解:指将一个关系模式分解成若干个关系模式后,通过自然联接和投影等运算仍能还原到原来的关系模式。
第一种方法是追踪表格法,适用于任何关系。
第二种方式是公式法,适用于两个模式得关系。

5.2.3.4.2 保持函数依赖(次重点★★★☆☆)

所谓的保持函数依赖就是将分解之后的函数依赖的集合合并起来,只要合并之后,与原来的函数依赖集合是保持等价的,我们就会说是保持函数依赖的。

设数据库模式δ = {R1, . . . , RK}是关系模式 R 的一个分解,F 是 R 上的函数依赖集,δ中每个模式Ri上的函数依赖集是Fi。如果{F1, . . . , Fk}与 F 是等价的(即相互逻辑蕴涵),则称分解δ保持函数依赖。如果分解不能保持函数依赖,则δ的实例上的值就可能有违反函数依赖的现象。这里出过选择题,给你分解前模式和分解后的模式让你判断是否逻辑蕴含。这个通过作图和推理法都可以做,一般不会很难。

这里牵扯到一个逻辑蕴含的概念。设 F 是关系 R(U)中的一个函数依赖集合,X、Y 是 R 的属性子集,如果能从 F 这个函数依赖集合中推导出 X →Y,则称 F 逻辑蕴含 X →Y,或者说 X →Y 是 F 的逻辑蕴含。记作 F|= XY 。F是集合一定要清楚。集合意味着里面有 X →Y,X →Z 的等等依赖关系。

★保持函数依赖分解

例1:有关系模式R(A,B,C),F={A→B,B→C},将其拆分为:R1(A,B),R2(B,C),是否保持函数依赖。

例2:有关系模式R(A,B,C),F={A→B,B→C,A→C},将其拆分为:R1(A,B),R2(B,C),是否保持函数依赖。

例3:有关系模式R(A,B,C),F={A→B,B→C,A→C},将其拆分为:R1(A,B),R2(A,C),是否保持函数依赖。

例4:有关系模式R(A,B,C,D,E),F={A→B,D→E},将其拆分为:R1(A,B,C),R2(D,E),是否保持函数依赖。

5.2.3.5 SQL语句

SQL语言中,Grant为授权语句,其语法规则为 :

Grant <权限> on 表名(列名) to 用户 with grant option。

权限字段包括:select/insert/update/delete/all等,就是英文意思增删改查等权限。

并且允许授权给他人,加上with grant option。

创建表 create table;

指定主键 primary key();

指定外键 foreign key();

修改表 alter table;

删除表 drop table;

索引 index; 视图 view;

CREATE TABLE S(Sno CHAR(5)NOT NULL UNIQUE,

Sname CHAR(30)UNIQUE,

Status CHAR(8),

City CHAR(20)

PRIMARY KEY(Sno));

ALTER TABLE S ADD Zap CHAR(6);

DROP TABLE Student

CREATE UNIQUE INDEX S-SNO ON S(Sno);

CREATE VIEW CS-STUDENT

数据库查询 select...from...where;

分组查询group by,分组时要注意select后的列名要适应分组,having为分组查询附加条件:

select sno,avg(score)from student group by sno having(avg(score)>60)更名运算as:select sno

as"学号"from t1

字符串匹配like,%匹配多个字符串,匹配任意一个字符串:
select *from t1where sname like'a
'

数据库插入insert into...values(): insert into t1 values('a'

,66)

数据库删除delete from...where:delete t1 where sno=4

数据库修改update...set...where:

update t1 set sname='aa'where sno=3排序order by,默认为升序,降序要加关键DESC:select*from

t1 order by sno desc

SELECT[ALL|DISTINCT]<目标列表达式>[,<目标列表达式>]...FROM<表名或视图名>[,<表名或视图名>][WHERE<条件表达式>]

GROUP BY\<列名1\>\[HAVING\<条件表达式\>\]\]\[ORDER BY\<列名2\>\[ASC\|DESC\]...

5.3 数据库控制功能(重点★★★★★)

要想使数据库中的数据达到应用的要求,必须对其进行各种控制,这就是DBMS 的控制功能,包括并发控制、性能优化、数据完整性和安全性,以及数据备份与恢复等问题。这些技术虽然给人们的感觉是边缘性技术,但对 DBMS 的应用而言,却是至关重要的。

5.3.1 并发控制(重点★★★★★)

在多用户共享系统中,许多事务可能同时对同一数据进行操作,称为并发操作。此时,DBMS 的并发控制子系统负责协调并发事务的执行,保证数据库的完整性不受破坏,同时,避免用户得到不正确的数据。

5.3.1.1 事务的基本概念(重点★★★★★)

DBMS 运行的基本工作单位是事务,事务是用户定义的一个数据库操作序列,这些操作序列要么全做,要么全不做,是一个不可分割的工作单位。事务具有以下特性(ACID):

(1)原子性(Atomicity)。事务是数据库的逻辑工作单位,事务的原子性保证事务包含的一组更新操作是原子不可分的,也就是说,这些操作是一个整体,不能部分地完成。

(2)一致性(Consistency)。一致性是指使数据库从一个一致性状态变到另一个一致性状态。例如,在转账的操作中,各账户金额必须平衡。一致性与原子性是密切相关的,一致性在逻辑上不是独立的,它由事务的隔离性来表示。

(3)隔离性(Isolation)。隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。它要求即使有多个事务并发执行,但看上去每个事务

按串行调度执行一样。这一性质也称为可串行性,也就是说,系统允许的任何交错操作调度等价于一个串行调度。

(4)持久性(Durability)。持久性也称为永久性,是指事务一旦提交,改变就是永久性的,无论发生何种故障,都不应该对其有任何影响。

事务的原子性、一致性、隔离性和持久性通常统称为 ACID 特性。

5.3.1.2 数据的不一致问题(重点★★★★★)

数据库的并发操作会带来一些数据不一致问题,例如,丢失修改、读 "脏数据"和不可重复读等,实际上可以概括为"写-写"并发场景和"读-写"并发场景
(1)丢失修改。事务 A 与事务 B 从数据库中读入同一数据并修改,事务 B的提交结果破坏了事务 A 提交的结果,导致事务 A 的修改被丢失。例如,有 Tl、T2 两个事务,其执行顺序如表 5-7 所示。则"③A =A-5 ,写回"操作会被" A=A-8 ,写回"操作覆盖掉,"③A=A-5,写回"将不起任何作用。

补充:第一类更新丢失问题(A 事务回滚时,把已经提交的 B 事务的更新数据覆盖了)、第二类更新丢失问题(A 事务覆盖 B 事务已经提交的数据,造成 B 事务所做操作丢失)。
(2)读 "脏数据"。事务 A 修改某一数据,并将其写回磁盘,事务 B 读取同一数据后,事务 A 由于某种原因被撤销,这时事务 A 已修改过的数据恢复原值,事务 B 读到的数据就与数据库中的数据不一致,是不正确的数据,称为"脏数据"。例如,有 T1、T2 两个事务,其执行顺序如表 5-8 所示。则 T2 中"读 A =70"就是读的脏数据。

(3)不可重复读。不可重复读是指事务 A 读取数据后,事务 B 执行了更新操作,事务 A 使用的仍是更新前的值,造成了数据不一致性。例如,有 Tl、T2 两个事务,其执行顺序如表 5-9 所示。

在表 5-9 中,T1 事务为了确保其重要计算无误,所以采用了验算的方式,两次独立取出数据并运算,最后进行验算(即比较两次运算结果是否相同)。在此处,虽然两次计算都没错,但由于在两次操作之间的时间间隔中,T2 对数据进行了修改,导致验算结果不正确,这就是不可重复读问题。
(4)幻读(读-写并发)。幻读本质上也属于不可重复读的情况,T1 读取某个范围的数据,T2 在这个范围内插入新的数据,T1 再次读取这个范围的数据,此时读取的结果和和第一次读取的结果不同。

典型真题

三级划分法

  • 数据库的产品很多,尽管它们支持的数据模型不同,使用不同的数据库语言,而且数据的在储结构也各不相同,但体系统构基本上都具有相同的特征,采用"三级模式和两级映像",如下图所示,图中①,②,③分别代表数据库系统中(40),图中④,⑤,⑥分别代表数据库系统中(41)。

    (40)
    A.物理层、逻辑层、视图层
    B.逻辑层、物理层、视图层
    C.视图层、物理层、逻辑层
    D.视图层、逻辑层、物理层
    (41)
    A.外模式/内模式映射、外模式内模式映射、概念模式内模式映射
    B.外模式概念模式映射、外模式/概念模式映射、概念模式/内模式映射. C.概念模式/内模式映射、概念模式/内模式映射、外模式内模式映射
    D.外模式/内模式映射、外模式内模式映射、概念模式/外模式映射
    【答案】D B
  • 在采用三级模式结构的数据库系统中,如果对数据库中的表Emp创建聚簇索引,那么改变的是数据库的( )
    A.模式 B.内模式. C.外模式 D.用户模式
    试题分析
    聚簇索引也叫簇类索引,是一种对磁盘上实际数据重新组织以按指定的一个或多个列的值排序,它改变的是数据库的内模式。
    参考答案:B
  • 数据的物理独立性和逻辑独立性分别是通过修改( )来完成的
    A.外模式与内模式之间的映像、模式与内模式之间的映像
    B.外模式与内模式之间的映像、外模式与模式之间的映像
    C.外模式与模式之间的映像、模式与内模式之间的映像
    D.模式与内模式之间的映像、外模式与模式之间的映像
    参考答案:D

关系运算

  • 关系R、S 如下表所示, R ⋈S 的结果集有( ) 个元组, R 、S 的左外联接、右外联接的元
    组个数分别为( )。

    (1)A. 1 B. 2 C. 3 D. 4
    (2)A. 2, 2 B. 2, 4 C. 4, 4 D. 4, 8
    参考答案:B、C
  • 给定关系R(A,B,C,D)和关系S(C,D,E),对其进行自然连接运算R ⋈S后的属性列为( )个;与σR.B>S.E(R ⋈S)等价的关系代数表达式为( )。
    A.4 B.5 C.6 D.7
    参考答案:B、D
    设关系R、S分别是下图的(a)和(b),则R÷S的结果为()。

    解题思路:
    1、找相同部分为BC
    2、R里的其它元素就为象集
    a1的象集为(b1、c2)(b2,c3)(b2,c1)
    a2的象集为(b3,c7),(b2,c3)
    a3的象集为(b4,c6)
    a4的象集为(b6,c6)
    3、只有a1包含了s和r里公共的部分,所以
    R÷S =(a1)

SQL语句

若要将部门表Demp中name列的修改权限赋予用户Ming,并允许Ming将该限授予他人,实现的SQL语句如下:

GRANT( )ON TABLE Demp TO Ming( )

A、SELECT(name) B、UPDATE(name)

C、INSERT(name) D、ALL PRIVILEGES(name)

A、FOR ALL B、CASCADE

C、WITH GRANT OPTION D、WITH CHECK OPTION

答案:B C

查询优化问题

典型的启发式规则:

1.选择运算应尽可能先做。在优化策略中这是最重要、最基本的一条

2.把投影运算和选择运算同时进行。避免重复扫描关系。

3.把投影同其前或其后的双目运算结合起来

4.把某些选择同在它前面要执行的笛卡尔积结合起来成为一个连接运算

5.找出公共子表达式:如果重复出现的子表达式的结果不是很大的关系并且从外存中读入这个关系比计算该子表达式的时间少得多,则先计算一次公共子表达式并把结果写入中间文件是合算

在关系R(A1, A2, A3)和S(A1, A3, A4)上进行关系运算的4个等价的表达式E1、E2、E3和E4如下所示:如果严格按照表达式运算顺序,则查询效率最高的是( )

A.E1 B.E2. C.E3 D.E4

参考答案:B

此题是关系代数表达式查询问题,相同结果下,自然连接的效率优于笛卡尔积。

备选答案中,E1和E2为自然连接,故优先选择A、B选项。E3和E4缺少了R.A1=S.A1这个等值条件。

优化SQL语句,减少比较次数是提高查询效率的有效方法。

A选项和B选项相比,B选项将可以对子表做的操作先做了,再做连接,最后投影,这是效率最高的一种方法。

Armstrong公理

给定关系模式 R<U,F>;其中 U 为属性集,F 是 U 上的一组函数依赖,那么

Armstrong 公理系统的增广律是指( )。

A. 若 X→Y,X→Z,则 X→YZ 为 F 所蕴涵

B. 若 X→Y,WY→Z,则 XW→Z 为 F 所蕴涵

C. 若 X→Y,Y→Z 为 F 所蕴涵,则 X→Z 为 F 所蕴涵

D. 若 X→Y,为 F 所蕴涵,且 Z⊆U,则入 XZ→YZ 为 F 所蕴涵

参考答案:D

函数依赖与键

1、

此题第一问就是考察函数依赖的定义。对于第一题直接使用代入法,由于

A1 为 a 时,A2 可能是 a 或 b 或 c,所以可以确定 A1→A2 不成立。同理带

入法可知 A1→A3 不成立。因此 ACD 三个选项均可排除。

2、给定关系模式R(U,F),U={A₁,A₂,A₃,A4}, F={A₁→A₂A₃, A₂A₃→A4},那么在关系R中(43)。以下说法错误的是(44)

A.有1个候选关键字A1. B.有1个候选关键字A2A3

C.有2个候选关键字A2和A3 D.有2个候选关键字A1和A2A3

A.根据F中"A₁→A₂A₃",可以得出"A₁→A₂"

B.根据F中"A₁→A₂A₃",可以得出"A₁→A₃"

C.根据F中"A₂A₃→A4",可以得出"A₂→A4,A₃→A4".

D.根据F中"A₁→A₂A₃,A₂A₃→A4",可以得出"A₁→A4"

答案:A C

给定关系模式R <U,F>,其中,属性集U={A、B、C、D、E}。函数依赖集F={AC→B,B→DE}。关系R( ) 且分别有( )。

A.只有一个候选关键字AC B.只有一个候选关键字AB

C.有两个候选关键字AC、BC D.有两个候选关键字AC、AB

A.一个非主属性和四个主属性 B.两个非主属性和三个主属性

C.三个非主属性和两个主属性D.四个非主属性和一个主属性

试题分析由"AC→B,B→DE",可以判断AC是唯一候选键(候选关键字),通过AC可以获得其他全部属性。因此AC分别是主属性,B、D、E为非主属性。

参考答案:A、C

范式

销售公司数据库中的关系零件为P(Pno,Pname,Sname,City,Qty),Pno表示零件号,

Pname表示零件名称,Sname表示供应商,City表示所在地,Qty表示库存量。其函数依赖

集F={Pno→Pname,(Pno,Sname)→Qty,Sname→City}。关系P为( ),存在冗余度大、

修改操作不一致、插入异常和删除异常的问题。若将P分解为( ),则可以解决这一问题。

A.1NF B.2NF C.3NF D.4NF

A.P1(Pname,Qty)、P2(Pno,Sname,City)

B.P1(Pname,Pname)、P2(Sname,City,Qty)

C.P1(Pno,Pname)、P2(Pno,Sname,Qty)、P3(Sname,City)

D.P1(Pno,Pname)、P2(Pno,Qty)、P3(Sname,City)、P4(City,Qty)

试题分析

原零件关系P存在非主属性对码的部分函数依赖:(Pno,Sname)→Qty,Sname→City,

因此P属于1NF。分解后的关系模式P1P2和P3消除了非主属性对码的部分函数依赖,同时不存

在传递依赖,故达到3NF。

参考答案:A、C

关系模式分解

1、设关系模式 R(U,F),其中:U= {A,B,C,D,E},F={A→B,DE→B,CB→E,E→A,B→D}。 ( ) 为关系模式R的候选关键字。分解 ( ) 是无损连接,并保持函数依赖的。

A.AB B.DE C.DB D.CE

A.ρ={ R1(AC),R2(ED),R3(B) }

B.ρ={ R1(AC),R2(E),R3(DB) }

C.ρ={ R1(AC),R2(ED),R3(AB) }

D.ρ={ R1(ABC),R2(ED),R3(ACE) }

试题分析

第54题选项D中,E→A,A→B,B→D,CB→E包括了全部的属性。

第55题判断无损连接有多种方法,下面介绍一种构造二维表进行判断的方法(以正确选项D

为例):

① 构造一个初始的二维表,若"属性"属于"模式"中的属性,则填aj,否则填bij。

② 逐一考察关系式中的函数依赖,将表中的bij修改成aj。如CB→E,则上表中第一行第六列的

b15,修改成a5。修改结果如下表所示。

③ 修改后的表格若任一行存在a1,a2,a3,a4,a5的情况,该分解就属于无损连接,如上表

格中第一行存在a1,a2,a3,a4,a5,因此属于无损连接。

参考答案:D、D

2、给定关系模式 R < U,F >,U= {A,B,C,D,E},F = {B→A,D→A,A→E,AC→B },则R的候选关键字为( ),分解ρ= {Rl(ABCE), R2(CD)}( )。

A.CD B.ABD C.ACD D.ADE

A.具有无损连接性,且保持函数依赖

B.不具有无损连接性,但保持函数依赖

C.具有无损连接性,但不保持函数依赖

D.不具有无损连接性,也不保持函数依赖

试题分析

CD能推出题中关系式的所有属性,因此 R 的候选关键字为CD。

判断是否为无损连接,首先进行R1∩R2=C,由于C不能推出R1或者R2中的任何属性值,因此

该分解为有损分解。原关系式F中有D→A而分解的Rl(ABCE)中没有D,所以该分解不保持函数依赖。

参考答案:A 、D

事物的基本概念

事务的( )是指"当多个事务并发执行时,任一事务的更新操作直到其成功提交的整个过程,对其他事务都是不可见的"。

A.原子性

B.一致性

C.隔离性

D.持久性

参考答案:C

相关推荐
王会举1 小时前
让SQL飞起来:搭建企业AI应用的SQL性能优化实战
数据库·人工智能·ai·性能优化
bing_1581 小时前
在 Spring Boot 项目中,如何进行高效的数据库 Schema 设计?
数据库·spring boot·后端·数据库schema设计
听雪楼主.1 小时前
Oracle补丁安装工具opatch更新报错处理
数据库·oracle
不吃元西1 小时前
对于客户端数据存储方案——SQLite的思考
数据库·sqlite
rgb0f01 小时前
MySQL视图相关
数据库·mysql·oracle
编程、小哥哥1 小时前
oracle值sql记录
数据库·sql·oracle
三千花灯1 小时前
jmeter提取返回值到文件
数据库·jmeter
萧离1952 小时前
超细的Linux安装minio教学
数据库
小吕学编程2 小时前
基于Canal+Spring Boot+Kafka的MySQL数据变更实时监听实战指南
数据库·后端·mysql·spring·kafka
一个小白5552 小时前
Linux,redis群集模式,主从复制,读写分离
linux·运维·数据库·centos