数据库系统概论期末复习
·
太好了,我们现在将把《数据库系统概论》各考试题型下的复习知识点具体化,每一个点都细致到定义、操作、要点、例子,确保你能牢牢掌握考试所需的核心内容。
✅ 一、简答题 — 概念+原理类
| 知识点 | 详细内容 |
|---|---|
| 数据库(Database) | 存储在计算机中的有组织的、共享的数据集合,长期保存、可被多个用户访问。 |
| 数据库管理系统(DBMS) | 用于管理数据库的软件系统,实现数据定义、存取控制、事务处理、恢复等功能。如:MySQL、Oracle。 |
| 数据库系统(DBS) | 包括数据库、DBMS、数据库管理员及相关应用程序的整体。 |
| 数据模型 | 是对现实世界数据特征的抽象,分为:概念模型(ER)、逻辑模型(关系模型)、物理模型(存储结构)。 |
| 三层模式两级映射 | 模式(Schema)=逻辑结构,外模式=用户视角,内模式=物理存储结构。实现逻辑/物理数据独立性。 |
| 数据独立性 | 数据逻辑结构变更不影响应用程序(逻辑独立性);物理存储变更不影响逻辑结构(物理独立性)。 |
| 事务(Transaction) | 一个或多个SQL操作组成的最小逻辑单位,必须具有ACID特性。 |
| ACID特性 | 原子性(不可分)、一致性(状态合法)、隔离性(并发正确)、持久性(事务完成后永久保存)。 |
| 完整性约束 | 实体完整性(主键非空唯一),参照完整性(外键值存在于主表),用户定义约束(CHECK等)。 |
| 视图(View) | 是基于SELECT语句的虚拟表,没有物理存储,用于安全性、简化操作、限制访问。 |
✅ 二、分析题 — 事务调度、恢复机制、视图更新等
| 类型 | 详细内容 |
|---|---|
| 事务并发调度 | 多事务交错执行需保证结果等价于串行调度。分析“冲突等价性”或构造“优先图”判断是否可串行。 |
| 两段锁协议(2PL) | 加锁阶段后不得再加锁,释放阶段后不得加锁;保证可串行性。 |
| 死锁 | 多事务相互等待造成系统阻塞;解决方法包括超时、等待图检测、预防协议(如Wound-Wait) |
| 恢复策略 | 使用日志文件:REDO日志(重做已提交事务),UNDO日志(撤销未提交事务);日志中记录 <T, 操作, 原值, 新值> |
| 检查点机制 | 每隔一段时间记录系统当前状态的检查点,用于减少恢复时间。 |
| 视图更新可行性 | 只有当视图是单一基表且无聚集/连接/分组/DISTINCT时才可直接更新。 |
✅ 三、数据库设计题(ER图 + 建表)
🧩 概念结构设计(ER模型)
| 要素 | 内容 |
|---|---|
| 实体(Entity) | 具有独立存在意义的事物,如“学生”、“图书” |
| 属性(Attribute) | 实体的特征,如“学号”、“姓名” |
| 主码(Key) | 唯一标识实体的属性组合 |
| 联系(Relationship) | 实体间的联系,如“选课”(学生与课程) |
| 一对多/多对多 | 一学生选多课:学生→选课←课程 |
🔨 逻辑结构设计(关系模型)
| 操作 | 说明 |
|---|---|
| 实体 → 表 | 每个实体建一张表,标主码 |
| 多对多关系 → 新建中间表 | 包含两个外键、可能还有属性 |
| 弱实体处理 | 主码为“部分主码+主实体主码” |
🎯 范式标准
| 范式 | 要求 |
|---|---|
| 1NF | 所有属性都是原子值 |
| 2NF | 1NF + 消除部分函数依赖 |
| 3NF | 2NF + 消除传递函数依赖 |
| BCNF | 对所有非平凡函数依赖,决定因素是候选码 |
✅ 四、关系理论题 — 函数依赖、范式分解
📘 函数依赖(FD)
| 术语 | 说明 |
|---|---|
| X→Y | 若两个元组X值相同,则Y值也相同 |
| 全函数依赖 | X→Y,X是最小的 |
| 部分依赖 | X→Y,但Y也依赖X的子集(违反2NF) |
| 传递依赖 | X→Y, Y→Z ⇒ X→Z(违反3NF) |
| 属性集闭包 X⁺ | 由X可推导出的所有属性集合 |
🧮 计算题:
-
判断候选码:找出属性集合X,使X⁺包含全部属性
-
判断范式
-
分解成3NF或BCNF:
- 是否保持依赖?
- 是否无损连接?
✅ 五、应用题 — SQL操作语句
🔧 数据定义语言(DDL)
CREATE TABLE Student (
SNO CHAR(6) PRIMARY KEY,
Name VARCHAR(20),
Age INT,
Dept CHAR(4)
);
ALTER TABLE Student ADD GPA FLOAT;
DROP TABLE Student;
🧾 数据操作语言(DML)
INSERT INTO Student VALUES ('202301', 'Tom', 20, 'CS');
UPDATE Student SET Age = Age + 1 WHERE SNO = '202301';
DELETE FROM Student WHERE Dept = 'CS';
🔍 查询语言(DQL)
-- 查询CS系学生
SELECT Name FROM Student WHERE Dept = 'CS';
-- 连接查询
SELECT S.Name, C.CName
FROM Student S, SC, Course C
WHERE S.SNO = SC.SNO AND SC.CNO = C.CNO;
-- 嵌套查询:选修了“数据库”的学生
SELECT Name FROM Student
WHERE SNO IN (
SELECT SNO FROM SC WHERE CNO = 'DB01'
);
-- 分组与聚合
SELECT Dept, AVG(GPA)
FROM Student GROUP BY Dept
HAVING AVG(GPA) > 3.0;
👁️ 视图操作
CREATE VIEW CS_Student AS
SELECT SNO, Name FROM Student WHERE Dept = 'CS';
✅ 六、查询优化
| 优化技术 | 说明 |
|---|---|
| 提前投影/选择 | 减少中间结果体积 |
| 等价变换 | 选择与连接结合、合并多个选择 |
| 子查询重写为连接 | 提高效率 |
| 索引使用 | WHERE子句字段建索引提高查找速度 |
例:
SELECT * FROM A, B WHERE A.id = B.aid AND B.score > 90;
优化为:
SELECT * FROM A JOIN (SELECT * FROM B WHERE score > 90) AS B1 ON A.id = B1.aid;
✅ 七、并发控制与恢复
🔐 并发控制
-
封锁协议
- 两段锁:加锁阶段、释放阶段
- 保证串行性
-
死锁检测
- 等待图,环 ⇒ 死锁
-
解决方法
- 等待超时
- Wound-Wait(老抢新)/Wait-Die(老等新)
🔁 恢复机制
-
日志类型
- Undo日志:撤销未提交事务
- Redo日志:重做已提交事务
-
日志内容
<T1, A, old_value, new_value> -
检查点
- 标记一致状态,减少恢复扫描范围
-
恢复过程
- 分析阶段 → 重做(已提交) → 撤销(未提交)
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)