数据库复习笔记
目录
- 四个概念题,五个计算题 3
- 第一章 4
- 1.数据库系统构成、特点 4
- 2.数据模型的定义及建立过程,客观对象的抽象过程,如何进行的抽象。4
- 3.数据模型的组成要素 4
- 4.常用的三种数据模型。关系模型的优缺点
- 5.数据库系统的三级模式结构与二级映像功能。5
- 第二章 6
- 1.关系数据模型的基本概念(域、属性、元组、码、主属性、非主属性等)的区分
6
- 2.基本的关系操作(选择、投影、连接、除、并、差、交、笛卡尔积)6
- 3.关系的三个完整性 6
- 4.关系代数的运算,规范的符号及过程,作业 7
- 第三章 8
- 1.使用 SQL 语言定义、查询、增加、删除、修改的规范格式,作业 8
- 第四章 10
- 1.两种存取控制方法 10
- 2.权限的授予、回收的 SQL 语法规范 10
- 第五章 12
- 1.使用 SQL 定义数据库的三个完整性,违约处理 12
- 第六章 14
- 1.函数依赖(平凡函数依赖与非平凡函数依赖、完全函数依赖与部分函数依赖、传递函数依赖与关系的范式级别的联系)14
- 2.函数依赖集的最小化的过程 15
- 3.求候选码的过程,进一步如何区分主属性与非主属性 16
- 4.判断给定的关系属于第几范式,如何分解使之达到更高的范式级别。第二次作业题第
2、6 题 17
- 第七章 19
- 1.ER 模型的基本概念,联系的类型,根据给出的语义按规范画出 ER
图,并将 ER 图转换成关系,关系的规范表示(主码、外码)。19
- 2.ER
图转换成关系后的优化方法,规范化程度是否越高越好,对关系模式的水平分解与垂直分解。20
- 物理设计中关系模式存取方法有哪些?B+树索引、聚簇索引的定义及优缺点、聚簇索引与非聚簇索引的区别。22
- 第九章 26
- 1.根据给定的语义画出查询树、关系代数语法树,并进行优化作业 26
- 第十章 27
- 恢复机制涉及的关键问题 27
- 日志文件、日志文件的格式和内容,用途有哪些?27
- 三种故障类型及对应的恢复策略,系统故障的恢复步骤。28
- 第十一章 31
- 并发操作带来的三种数据不一致性 31
- 2.封锁的概念,封锁的两种基本类型 31
- 3.封锁协议的概念,三个级别的封锁协议的规则 32
- 4.可串行化调度的概念,两段锁协议的概念,二者之间的关系 33
四个概念题,五个计算题
四个概念:
五个计算:
- 给出数据库写出 SQL 语句。
- 画 ER 图,并把 ER 图转换成关系模型,标出主码和外码。
- 给出数据库写关系代数。
- 关系范式,关系理论。
- 语法树跟他的优化。
第一章
1.数据库系统构成、特点
数据库系统构成:数据库,数据库管理系统,应用程序,数据库管理员。
特点:数据结构化、数据共享性和独立性高、冗余性低、易扩展,并且数据由数据库管理系统统一管理和控制。
2.数据模型的定义及建立过程,客观对象的抽象过程,如何进行的抽象。
- 数据模型的定义
数据模型是对现实世界客观对象及其关系的抽象和描述,是数据库系统中数据的组织方式和操作规则的基础。它通过形式化的结构来表示数据及其逻辑关系,并为数据库设计和使用提供基础。数据模型的三个部分:数据结构、数据操作和完整性约束。
- 建立过程
数据模型的建立是将现实世界的复杂系统抽象为数据库中逻辑化的数据结构的过程。一般包括这几个步骤:需求分析、概念结构设计、逻辑结构设计、物理模型设计、模型验证与优化。
- 客观对象的抽象过程
- 信息抽象
目标:从现实世界中提取有意义的数据及其关系。
方法:识别关键实体及其行为,忽略无关细节(如学生只需关注姓名、学号等)。
- 概念抽象
目标:建立一个能够直观表示现实世界数据和关系的模型。 方法:通过 ER
图抽象实体、属性、关系,如学生与课程的选课关系。
- 逻辑抽象 目标:用数据库支持的逻辑结构表示数据模型。
方法:将实体和关系转化为表格形式,明确主键、外键及约束规则。
- 物理抽象
目标:将逻辑模型映射到计算机系统,考虑存储方式和访问效率。
方法:设计索引、存储方案等优化物理实现。
- 如何进行抽象?
- 识别关键实体和属性
从需求出发,提取业务中的核心对象和数据特性,例如学生、教师、课程的具体属性。
- 定义关系
确定对象间的交互和关联关系,例如学生选修哪些课程,课程由哪些教师授课。
- 忽略无关细节
只保留与系统目标相关的信息,剔除冗余和过于复杂的内容。
- 遵循建模规范 遵循数据库规范化原则(如
1NF、2NF、3NF)以确保模型的合理性。
- 迭代改进 在开发过程中不断验证模型,结合反馈优化抽象结果。
3.数据模型的组成要素
三个要素:数据结构,数据操作和完整性约束条件。
- 数据结构:数据对象的集合。它描述数据对象的类型、内容、属性以及数据对象之间的关系,是对系统静态特性的描述。
- 数据操作:数据库中允许执行操作的集合,包括操作及有关的操作规则,主要有检索(查询)和更新(插入、删除和修改)两类操作,是对系统动态特性的描述。
- 完整性约束:数据完整性规则的集合。他是对数据与数据之间关系的制约以及关系依存的规则,用以保证数据的完整性和一致性。
4.常用的三种数据模型。关系模型的优缺点。关系模型的存取路径是如何对用户隐蔽的。
- 三种数据模型:概念模型、逻辑模型、物理模型。
- 关系模型(二维表)
- 优点:关系模型的概念单一,数据结构简单、清晰,用户容易理解和使用;关系模式的存储路径对用户透明,从而具有更高的数据独立性、更好的安全保密性;灵活性高,适用多种应用场景。
- 缺点:性能较低,在处理复杂查询时性能可能下降。
- 存取路径对用户隐藏:
逻辑与物理分离:用户只需要理解和操作逻辑模型,使用 SQL
来描述“查询什么数据”。数据库管理系统负责将逻辑操作映射到底层的物理存储操作;
5.数据库系统的三级模式结构与二级映像功能。
- 三级模式结构:外模式、模式、内模式
- 外模式:是模式的子集,是对用户所使用的局部数据的逻辑结构和特征的描述。
- 模式:对数据库中全体数据的逻辑结构和特征的描述。
- 内模式:是对数据物理结构和存储方式的描述。
- 二级映像功能:外模式/模式映像,模式/内模式映像
- 外模式/模式
定义:将用户的外模式映射到模式,保证逻辑独立性。 功能:
用户可以根据需求更改自己的视图,而不影响模式和其他用户的视图。
应用程序对数据的访问可以通过定义视图灵活调整,而无需修改底层结构。
- 模式/内模式
定义:将模式映射到内模式,保证物理独立性。 功能:
允许物理存储方式的调整(如索引重建、存储文件迁移),而不影响模式。
数据库优化器能够根据映像选择高效的存储路径和访问方法。
第二章
1.关系数据模型的基本概念(域、属性、元组、码、主属性、非主属性等)的区分
- 域:一个属性的取值范围。
- 属性:关系中的列,表示实体的某个特定特征。
- 元组:关系中的行,表示一个具体的实体或对象。
- 码:码是一个或多个属性的集合,用来唯一标识关系中的一个元组。码有候选码、主码和外码。候选码:可以唯一标识元组的属性集合;主码:从候选码中选出来的作为主要标记元组的码。外码:一个表的属性是另一个表的主键,用来联系两个表之间的关系。
- 主属性:候选码中的属性。
- 非主属性:关系中除主属性以外的其他属性。
2.基本的关系操作(选择、投影、连接、除、并、差、交、笛卡尔积)
- 并:
- 交:
- 差:
- 笛卡尔积:
- 选择:
- 投影:
- 连接:
- 除:
3.关系的三个完整性
- 实体完整性:确保每一行是唯一标识的,不会有重复或缺失的主键值。主键必须满足唯一性和非空性。
- 参照完整性:用户维护表之间的关系,确保外键的值必须匹配引用表中的主键值,或者为
Null。禁止出现孤立的外键值。
- 用户定义完整性:由数据库设计者根据具体业务规则定义,用于保证数据符合特定的语义要求。用户定义完整性可以通过数据类型、检查约束、触发器等实现。
4.关系代数的运算,规范的符号及过程,作业
第三章
1.使用 SQL
语言定义、查询、增加、删除、修改的规范格式,作业
1 2 3 4 5 6
| CREATE TABLE Student ( StudentID INT PRIMARY KEY, Name VARCHAR(50) NOT NULL, Age INT, Major VARCHAR(50) );
|
1 2 3 4
| SELECT Name, Age FROM Student WHERE condition ORDER BY Age DESC;
|
1 2
| INSERT INTO Student (StudentID, Name, Age, Major) VALUES (1, ‘Alice’, 21, ‘Computer Science’);
|
1 2
| DELETE FROM Student WHERE Age < 18;
|
1 2 3
| UPDATE Student SET Age = 22, Major = ‘Mathematics’ WHERE StudentID = 1;
|
- 修改表结构 ALTER:用于添加、修改或删除表中的列。
1 2
| ALTER TABLE table_name ADD column_name data_type constraints;
|
1 2
| ALTER TABLE table_name MODIFY column_name new_data_type;
|
1 2
| ALTER TABLE table_name DROP COLUMN column_name;
|
示例:
1 2
| ALTER TABLE Student ADD Email VARCHAR(100);
|
第四章
1.两种存取控制方法
- 强制存取控制(MAC)
- 特点:
- B1 级
- 每一个数据对象被标以一定的密级
- 每一个用户也被授予某一个级别的许可证
- 对于任意一个对象,只有具有合法的许可证的用户才可以存取。
- 自主存取控制(DAC)
- 特点:
- C2 级
- 用户对不同的数据对象有不同的存取权限
- 不同的用户对同一对象也有不同的权限
- 用户还可以将其拥有的存取权限转授给其他用户
2.权限的授予、回收的 SQL
语法规范
1 2 3
| GRANT 权限列表 ON TABLE 对象名称 TO 用户/角色 [WITH GRANT OPTION]
|
- 示例:
- 把查询 Student 表权限授给用户 U1
1 2 3
| GRANT SELECT ON TABLE Student TO U1;
|
- 把 Student 表和 Course 表的全部权限授给用户 U2 和 U3
1 2 3
| GRANT ALL PRIVILEGES ON TABLE Student, Course TO U2, U3;
|
1 2 3
| GRANT SELECT ON TABLE SC TO PUBLIC;
|
1 2 3
| REVOKE 对象名称 ON 对象名称 FROM 用户/角色 [CASCADE | RESTRICT];
|
- CASCADE:级联回收,即同时回收被授予者通过 WITH GRANT OPTION
再授予他人的权限。
- RESTRICT:限制级联回收,如果其他用户基于这些权限再进行授权,回收操作会失败。
- 示例:
- 把用户 U4 修改学生学号的权限收回
1 2 3
| REVOKE UPDATE(Sno) ON TABLE Student FROM U4;
|
1 2 3
| REVOKE SELECT ON TABLE SC FROM PUBLIC;
|
第五章
1.使用 SQL
定义数据库的三个完整性,违约处理
- 实体完整性
- 实现方法:在创建表时,通过 PRIMARY KEY 约束声明主键。
- 违约处理:如果插入或更新的记录导致主键重复,数据库会抛出错误(如
Violation of PRIMARY KEY constraint)。
- 示例:
1 2 3 4
| CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Name CHAR(20) NOT NULL, );
|
- 参照完整性
- 实现方法:在创建表时,通过 FOREIGN KEY
约束声明外键,并定义级联规则(如 ON DELETE 或 ON UPDATE)。
- 违约处理:如果插入或更新的记录违反外键约束,数据库会抛出错误(如
Violation of FOREIGN KEY
constraint);如果尝试删除主表中被外键引用的记录,且未定义级联操作,则会抛出错误。
- 示例:
1 2 3 4 5 6 7 8 9 10 11 12
| CREATE TABLE SC( Sno VARCHAR(9), Cno VARCHAR(4), Grade INT, PRIMARY KEY(Sno, Cno), FOREIGN KEY(Sno) REFERENCES Student(Sno) ON DELETE CASCADE ON UPDATE CASCADE, FOREIGN KEY(Cno) REFERENCES Course(Cno) ON DELETE CASCADE ON UPDATE CASCADE, );
|
- 用户定义完整性
- 实现方法:使用 CHECK 约束定义数据范围或条件;使用 UNIQUE
约束确保字段值的唯一性;使用 DEFAULT 约束设置默认值;列值非空(NOT
NULL)。
- 违约处理:插入或更新数据时,若不满足 CHECK
条件,数据库会抛出错误;若插入的值重复了 UNIQUE
字段的值,数据库会抛出错误;若对于非空部分,没有填写数据,则会抛出错误。
- 示例:
- NOT NULL 和 CHECK
1 2 3 4 5 6 7
| CREATE TABLE SC ( Sno CHAR(9) NOT NULL, Cno CHAR(4) NOT NULL, Grade SMALLINT CHECK(Grade >= 0 AND Grade <= 100), PRIMARY``` KEY(Sno, Cno), );
|
1 2 3 4 5 6
| CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname CHAR(8) NOT NULL, Ssex CHAR(2) CHECK (Ssex IN (‘男’, ‘女’)),
);
|
第六章
1.函数依赖(平凡函数依赖与非平凡函数依赖、完全函数依赖与部分函数依赖、传递函数依赖与关系的范式级别的联系)
- 平凡函数依赖与非平凡函数依赖
- 平凡函数依赖 如果 且 ,那么称 为平凡函数依赖。 例如,假设关系 ,则 是平凡函数依赖
- 非平凡函数依赖 如果 且 ,那么称 为非平凡函数依赖 例如,在关系 中,如果 ,且 B 不是 A 的子集,则 是非平凡函数依赖。
- 完全函数依赖于部分函数依赖
- 完全函数依赖 如果 ,且移除
中的任何一个属性都会破坏这种依赖关系,则称 是完全函数依赖。 例如,假设关系 ,如果 且 ,则 是完全函数依赖。
- 部分函数依赖 如果 ,且 的某个真子集也可以决定 ,则称 是部分函数依赖。 例如,在关系 中,如果 ,且 ,则 是部分函数依赖。
- 传递函数依赖 如果 和 ,且 不包含在 中,则称 是传递函数依赖。 例如,关系 ,如果 且 ,则 是传递函数依赖。
- 函数依赖与范式级别
- 第一范式(1NF):关系中每个属性的值都是原子的,且具有唯一性。函数依赖不直接影响
1NF。
- 第二范式(2NF):消除部分函数依赖,所有非主属性完全依赖于主码。
- 第三范式(3NF):消除传递函数依赖,要求非主属性不依赖于其他非主属性。
- BCNF:在 3NF 的基础上,进一步要求任何非平凡函数依赖 中, 必须是超码。
2.函数依赖集的最小化的过程
- 消除冗余属性(最小化左部) 对于每个函数依赖 ,检查 的每个属性 :
- 临时移除 ,得到 。
- 使用剩余的函数依赖集检查是否 依然成立。 如果 成立,则移除 。 如果 不成立,则保留 。
- 重复此过程直到
的每个属性都被检查。
- 示例: 函数依赖集: 检查 ,移除
: ①剩余依赖:。 ② 已存在,因此 中 B 是冗余。 最简化结果:。
- 消除冗余依赖(移除冗余规则) 对于每个函数依赖 :
- 临时移除 。
- 使用剩余的函数依赖集检查是否 可以有其他依赖推导出来:
如果可以推导,则移除 。
如果不可以推导,则保留 。
- 重复此过程直到所有依赖都被检查
- 示例: 函数依赖集:。 检查 ,移除后剩余:。 可以通过 和 推导,因此 是冗余的。 最简化结果:。
- 分解右部(每条规则只依赖一个属性) 将每个依赖 中 拆分为单一属性依赖:
- 如果 包含多个属性(例如 ),将其分解为多条依赖 和 。
- 保证分解后的依赖集不改变原依赖集的含义。
3.求候选码的过程,进一步如何区分主属性与非主属性
- 求候选码的过程
- 确定所有属性和函数依赖集
- 确定属性的闭包
- 寻找候选码
- 计算属性闭包 ①(通过 )。 ②(通过 )。 ③(无法扩展)。
- 寻找候选码 ① 是候选码。
②检查其他组合,发现 不包含
,故 不是候选码。 最终,候选码为 。
- 区分主属性与非主属性
- 定义 ①主属性:出现在至少一个候选码中的属性。
②非主属性:不属于任何候选码的属性。
- 区分方法 ①找出所有候选码 ②将候选码中包含的属性标记为主属性
③其余属性为非主属性
- 示例: 假设候选码为 :
候选码:。 主属性:。 非主属性:。
4.判断给定的关系属于第几范式,如何分解使之达到更高的范式级别。第二次作业题第
2、6 题
- 关系范式的判断步骤
- 检查第一范式(1NF) 条件:每个属性的值必须是原子值(不可分割的)。
检查:是否存在多值属性、嵌套属性、或非原子值。
处理:如果不满足,将非原子属性拆分为单独的属性,使其满足 1NF。
- 检查第二范式(2NF) 条件:满足
1NF;每个非主属性完全依赖于候选码(无部分函数依赖)。
检查:找出候选码;检查非主属性是否部分依赖于候选码。
处理:如果有部分依赖,将关系分解,使每个非主属性完全依赖于候选码。
- 检查第三范式(3NF) 条件:满足 2NF;没有非主属性传递依赖于候选码。
检查:检查是否存在传递函数依赖:候选码 非主属性 非主属性。
处理:如果有传递函数依赖,将关系分解,移除传递依赖。
- 检查 BCNF 条件:满足 3NF,每个非平凡函数依赖的左部是超码。
检查:找出每个函数依赖 ,检查
是否是超码。 处理:如果
不是超码,将关系分解,是函数依赖左部是超码。
- 分解关系到更高范式的过程
- 判断是否满足 1NF 假设每个属性都是原子值,则 满足 1NF。
- 判断是否满足 2NF 候选码:。
检查部分依赖:
完全依赖,无问题。 : 是非候选码属性,但 依赖于 。 是部分依赖 ,关系不满足 2NF。 分解:
将关系分解为 和 。
- 判断是否满足 3NF 对 ,检查传递依赖: 。 :存在传递依赖。 是传递依赖,关系不满足 3NF。 分解:
将 分解为 和 。
- 判断是否满足 BCNF 对
和 :
所有函数依赖的左部都是超码,满足 BCNF。
- 最终分解结果 经过分解,关系
被分解为一下子关系:
- :满足 BCNF。
- :满足 BCNF。
- :满足 BCNF。
第七章
1.ER
模型的基本概念,联系的类型,根据给出的语义按规范画出 ER 图,并将 ER
图转换成关系,关系的规范表示(主码、外码)。
- ER 模型的基本概念
- 实体(Entity)
①实体是指现实世界中可以被区分的对象。
②每个实体具有一组属性。例如,“学生”实体可以有学号、姓名、年龄等属性。
③实体分为两种类型: 强实体:独立存在,有主键。
弱实体:依赖于其他实体,没有主键,通过外键和识别属性结合形成主键。
- 属性(Attribute) ①属性是实体或联系的特征。
②属性分为以下几种: 简单属性:不能再分,例如学号。
复合属性:有多个简单属性组成,例如姓名(包含姓和明)。
多值属性:可以有多个值,例如电话号码。
派生属性:通过计算得到,例如年龄(通过出生日期计算)。
- 联系(Relationship) ①联系是指实体之间的关联。
②联系的类型: 一对一(1:1):一个实体与另一个实体的最多一个实例相关联。
一对多(1:N):一个实体可以与另一个实体的多个实例相关联。
多对多(N:M):一个实体可以与另一个实体的多个实例相关联。
- 键(Key) 主键:唯一标识实体的属性。
候选键:可以作为主键的属性集。 外键:用于在关系之间建立链接的属性。
- 画 ER 图的步骤
- 确定实体和属性。
- 确定实体之间的联系及联系的类型。
- 根据联系的寓意标明键(主键、外键)。
- ER 图转换成关系
- 强实体:直接转换成一个关系表,包含其所有简单属性。主键作为关系的主码。
- 弱实体:需要添加外键(指向相关强实体)以及识别属性,组合形成主键。
- 联系: ①1:1 联系:可将外键防止在任一实体中。 ②1:N
联系:将外键放置在“多”的一端。 ③M:N
联系:新建一张关系表,包含两个实体的主键作为外键,同时作为联合主键。
- 多值属性:单独建表,包含实体主键和多值属性。
- 关系范式表示
- 关系名称(主码,属性 1,属性 2,…) 例如:
学生(学号,姓名,年龄,班级) 课程(课程号,课程名,学分)
选课(学号,课程号,成绩) 主码:唯一标识一行记录的属性。
外码:参照一个关系主码的属性。
2.ER
图转换成关系后的优化方法,规范化程度是否越高越好,对关系模式的水平分解与垂直分解。
- ER 图转换成关系后的优化方法
- 规范化
规范化是一种避免冗余和消除数据异常的方法,将关系模式分解成复合一定规范的子关系模式。
主要规范化形式: 1NF:消除重复数据,每个属性值是不可分的原子值。 2NF:在
1NF 基础上,消除部分依赖,即非主属性完全依赖于主键。 3NF:在 2NF
基础上,消除传递依赖,即非主属性不依赖于主键以外的其他非主属性。
BCNF:对主属性和候选键的更严格限制。
- 去除冗余
确保每个关系模式的设计最小化冗余,避免多余的属性或关系重复存储同一数据。
- 消除数据异常
检查插入、删除和更新操作时是否会引发数据异常,优化设计以消除这些问题。
- 规范化程度是否越高越好?
不一定。规范化有优点,但过高的规范化(例如达到 BCNF
或更高)可能带来一些问题。
- 减少数据冗余,节省存储空间。
- 降低数据一致性问题的风险。
- 提高数据插入和更新的完整性。
- 增加查询复杂度,尤其是需要进行大量连接操作时。
- 在某些情况下会降低性能,尤其是针对高频查询的场景。
- 策略:根据应用需求和性能考虑,将规范和饭规范化结合。例如,OLTP
系统适合高频化设计,二 OLAP 系统可能会引入反规范化以提升查询性能。
- 关系模式的水平分解与垂直分解
- 水平分解
将一个关系的元组(行)划分到多个子关系中。
- 使用场景:
- 数据量大,但每次查询仅涉及特定范围的数据。例如,将学生表按年级划分。
- 分布式存储环境下,将数据分布到多个节点。
- 提高查询性能,减少扫描不相关数据的开销。
- 利于分布式并行处理。
- 需要维护数据分区规则。
- 跨分区查询可能增加复杂度。
- 垂直分解
将一个关系的属性(列)划分到多个子关系中。
- 适用场景:
- 数据表属性较多,但每次查询仅涉及少量属性。例如,将学生表的基本信息和选课信息分开。
- 不同属性有不同的访问频率或权限要求。
- 提高查询效率,减少不必要的属性加载。
- 易于调整不同属性的存储和权限控制。
- 需要维护分解关系的连接。
- 查询需要联合多个子关系时,可能降低性能。
3.
物理设计中关系模式存取方法有哪些?B+树索引、聚簇索引的定义及优缺点,聚簇索引与非聚簇索引的区别。
- 物理设计中关系模式存取方法
- B+树索引存取方法。
- Hash 索引存取方法。
- 聚簇索引存取方法。
- B+树索引
- 定义: B+树是一种平衡多路搜索树,常用语法数据库的索引实现。
- 特点:
- 所有数据记录都存储在叶节点。
- 叶节点通过双向链表连接,支持范围查询。
- 内节点只存储键值,不存储实际数据。
- 查询效率高:支持点查询和范围查询,尤其适用于有序数据的查找。
- 平衡结构:确保查找、插入和删除操作的时间复杂度为 。
- 可维护性好:自平衡特性,减少维护成本。
- 空间开销大:需要存储额外的索引节点信息。
- 数据更新成本高:插入、删除、修改数据时,可能需要更新索引结构。
1
| CREATE INDEX index_name ON table_name (column_name);
|
- 聚簇索引
- 定义:
聚簇索引是一种将数据存储在索引的叶节点中的索引方式,即索引的顺序决定了数据的物理存储顺序。
- 优点:
- 提高范围查询性能:数据物理存储顺序与索引顺序一致,提高了范围查询的效率。
- 减少磁盘 I/O:对于范围查询和连接操作,减少了磁盘读取的次数。
- 数据紧密存储:减少了数据碎片,提高了存储效率。
- 插入、更新和删除操作开销大:因为要维护数据的物理存储顺序。
- 一个表只能有一个聚簇索引:限制了选择范围。
- 可能导致数据分布不均匀:如果索引键值分布不均,可能导致性能问题。
1
| CREATE CLUSTERED INDEX index_name ON table_name (column_name);
|
- 聚簇索引与非聚簇索引的区别
- 数据存储位置:
- 聚簇索引:数据存储在叶节点中,物理存储顺序由索引键决定。
- 非聚簇索引:叶节点存储指向数据的指针,数据存储在不同位置。
- 性能表现:
- 聚簇索引:范围查询性能好,但更新性能差。
- 非聚簇索引:适合点查询,范围查询需要额外的查找操作。
- 数量限制:
- 聚簇索引:一个表只能有一个聚簇索引。
- 非聚簇索引:一个表可以有多个非聚簇索引。
- 空间开销:
- 聚簇索引:可能更紧凑,取决于数据存储。
- 非聚簇索引:需要额外存储指针信息,空间开销可能较大。
第九章
1.根据给定的语义画出查询树、关系代数语法树,并进行优化作业
- 查询树(Query Tree)
- 概念:
也叫查询执行树,是将查询操作表示为树形结构,其中每个节点表示一个操作,如选择、投影、连接等。
- 绘制步骤:
- 分析查询语句,识别操作。
- 从根节点开始,按照操作顺序添加节点。
- 叶节点表示基本表或中间结果。
- 示例: 对于 SQL 语句
SELECT A, B FROM R WHERE C > 10 AND D < 20
:
- 根节点为选择操作
σ(C > 10 AND D < 20)
。
- 其下有投影节点
π(A, B)
。
- 最底层是表节点
R
。
- 关系代数语法树
- 概念: 与查询树类似,但是基于关系代数操作的树形表示。
- 绘制步骤:
- 将 SQL 语句转化为关系代数表达式。
- 按照操作顺序构建树,根节点为最终操作,叶节点为基本关系。
- 示例: 对于 SQL 语句
SELECT A, B FROM R WHERE C > 10 AND D < 20
:
- 关系代数表达式:
π(A, B)(σ(C > 10 AND D < 20)(R))
。
- 根节点为投影操作
π(A, B)
。
- 下一层为选择操作
σ(C > 10 AND D < 20)
。
- 最底层为表
R
。
- 查询优化
- 优化的目的: 减少查询的时间和空间开销,提高查询性能。
- 优化的方法:
- 基于规则的优化:
- 利用关系代数等价变换规则,将查询表达式转换为更高效的形式。
例如,将选择操作下推,先做选择后做连接。
- 基于代价的优化:
- 评估不同执行计划的代价,选择代价最小的方案。
- 考虑因素包括磁盘 I/O、CPU 成本、内存使用等。
- 启发式优化:
- 基于经验规则进行优化,如优先执行选择和投影操作,减少中间结果集大小。
第十章
1. 恢复机制涉及的关键问题
- 恢复的目标:
- 确保数据库系统的一致性,在故障后恢复到一致状态。
- 减少数据丢失,尽可能恢复到最近的一致状态。
- 保证系统的可用性,尽快恢复正常运行。
- 恢复的基本原理:
- 冗余存储:通过备份、日志等冗余手段存储数据,以便在故障时恢复。
- 事务处理:将操作封装在事务中,确保操作的原子性、一致性、隔离性和持久性。
2.
日志文件、日志文件的格式和内容,用途有哪些?
- 日志文件的概念:
日志文件是记录数据库系统中所有更新操作的文件,用于故障恢复。
- 日志文件的格式和内容:
- 日志记录通常包含:
- 事务标识符(TID):标识事务。
- 操作类型:如插入、删除、更新。
- 操作对象:表名、行号等。
- 操作前后的数据:旧值和新值。
- 常见的日志格式:
- 以记录为单位的日志:为每个操作记录单独的日志。
- 以事务为单位的日志:按事务汇总操作。
- 以检查点为单位的日志:定期生成检查点,标记一致性状态。
- 日志文件的用途:
- 用于事务恢复:
- 确保事务的原子性,可撤销未完成事务,重做已提交事务。
- 系统恢复:
3.
三种故障类型及对应的恢复策略,系统故障的恢复步骤。
- 故障类型:
- 事务故障:
- 系统故障:
- 介质故障:
- 恢复策略:
- 事务故障的恢复:
- 系统故障的恢复:
- 利用日志文件:
- 撤销未完成事务(UNDO)。
- 重做已提交事务(REDO)。
- 介质故障的恢复:
- 从备份恢复:
- 结合日志文件进行事务的 UNDO 和 REDO。
- 系统故障的恢复步骤:
- 重新启动数据库系统。
- 找到最近的检查点记录。
- 从检查点开始,检查日志文件:
- 对于已提交但未写入磁盘的事务,执行 REDO。
- 对于未提交的事务,执行 UNDO。
第十一章
1.
并发操作带来的三种数据不一致性
- 丢失修改:
- 场景:
两个事务同时修改同一数据,后提交的事务覆盖了先提交的修改。
- 示例: 事务 T1 修改数据 X 为 10,事务 T2 修改数据 X 为
20,最终结果可能只保留 T2 的修改。
- 不可重复读:
- 场景:
一个事务两次读取同一数据,另一个事务在两次读取之间修改了该数据。
- 示例: 事务 T1 第一次读取数据 X 为 10,事务 T2 修改 X 为 20,T1
再次读取时得到 20。
- 读脏数据:
- 场景: 一个事务读取了另一个未提交事务修改的数据。
- 示例: 事务 T1 修改数据 X 为 20,但未提交,事务 T2 读取 X 为 20,若
T1 回滚,T2 读取的是脏数据。
2.封锁的概念,封锁的两种基本类型
- 封锁的概念:
封锁是一种并发控制机制,用于防止多个事务同时访问同一数据,保证事务的隔离性。
- 封锁的两种基本类型:
- 排他锁(X 锁,写锁):
- 当事务 T 对数据对象 A 加排他锁时,其他事务不能对 A 加任何锁,直到 T
释放锁。
- 共享锁(S 锁,读锁):
- 当事务 T 对数据对象 A
加共享锁时,其他事务可以加共享锁,但不能加排他锁,直到 T 释放锁。
3.封锁协议的概念,三个级别的封锁协议的规则
- 封锁协议的概念:
封锁协议是对事务何时加锁、加何种锁以及何时释放锁的一组规定,以保证并发操作的正确性。
- 一级封锁协议:
- 规则: 事务在修改数据前必须加 X 锁,直到事务结束才释放锁。
- 目的: 防止丢失修改。
- 二级封锁协议:
- 一级封锁协议的基础上,事务在读取数据前加 S 锁,读完即释放。
- 防止丢失修改和读脏数据。
- 三级封锁协议:
- 二级封锁协议基础上,事务在读取数据前加 S 锁,事务结束才释放。
- 防止丢失修改、读脏数据和不可重复读。
4.可串行化调度的概念,两段锁协议的概念,二者之间的关系
- 可串行化调度的概念:
可串行化调度是指多个并发事务的执行结果与按某种串行顺序执行这些事务的结果相同。
- 两段锁协议的概念:
- 事务分两个阶段:
- 扩展阶段:事务可以加锁,但不能解锁。
- 收缩阶段:事务可以解锁,但不能加锁。
- 保证可串行化调度:
- 二者之间的关系:
遵循两段锁协议的事务调度一定是可串行化的,但可串行化调度不一定遵循两段锁协议。