软件设计师考试 - 数据库技术
文章目录
数据库系统组成:
- 数据库(DB):结构化数据的集合。
- 数据库管理系统(DBMS):管理数据库的软件(如MySQL、Oracle)。
- 数据库系统(DBS):DB + DBMS + 应用程序 + 用户。
数据库管理系统利用日志文件来进行事务故障恢复和系统故障恢复。在事务处理过程中,把事务开始、事务结束以及对数据库的插入、删除和修改的每一次操作写入日志文件。 当系统正常运行时,按一定的时间间隔,把数据库缓冲区内容写入数据文件;一旦发生故障,DBMS的恢复子系统利用日志文件撤销事务对数据库的改变,回退到事务的初始状态。
一、数据库系统基础
- 数据库模型
- 关系模型:核心模型,用二维表(关系)表示数据,核心概念包括:
- 关系(表)、属性(列)、元组(行)、候选码(唯一标识元组的属性集)、主码(选定的候选码)、外码(关联其他表主码的属性)。
- 其他模型:层次模型(树形结构)、网状模型(图结构),了解其特点即可。
- 关系模型:核心模型,用二维表(关系)表示数据,核心概念包括:
- 数据库三级模式
- 外模式(用户视图)、模式(逻辑结构)、内模式(物理存储),通过两级映像实现数据独立性(逻辑独立性与物理独立性)。
二、关系数据库与SQL
- 关系代数
- 基本运算:选择(σ)、投影(π)、并(∪)、差(−)、笛卡尔积(×)。
- 扩展运算:连接(⋈)、自然连接、除运算(÷)、交(∩)等。
- 考试重点:根据关系代数表达式写出等价SQL语句。
- SQL语言
- DDL(数据定义语言):
CREATE TABLE
,ALTER TABLE
,DROP TABLE
。 - DML(数据操纵语言):
SELECT
(重点)、INSERT
,UPDATE
,DELETE
。 - DCL(数据控制语言):
GRANT
,REVOKE
。 - 高级查询:分组(
GROUP BY
)、聚合函数(COUNT
,SUM
,AVG
)、子查询、连接查询(内连接、左外连接、右外连接)。 - 索引:
CREATE INDEX
,理解B树、哈希索引的适用场景。
- DDL(数据定义语言):
- 完整性约束
- 实体完整性:主键(
PRIMARY KEY
)非空且唯一。 - 参照完整性:外键(
FOREIGN KEY
)引用有效值。 - 用户定义完整性:如
CHECK
约束。
- 实体完整性:主键(
三、数据库设计
- E-R模型:全称实体-关系模型(Entity-Relationship Model),用于描述现实世界中的对象之间的关系。
- E-R模型是一种图形化的表示方式,通常使用矩形表示实体,椭圆表示属性,菱形表示关系(联系),箭头表示关系的方向,线条表示属性或关系的类型。
- ER模型与关系模式转换
- ER图要素:实体、属性、联系(1:1、1:N、M:N)。
- 转换规则:实体→表,属性→字段,多对多联系→独立表。
- 考试重点:根据ER图设计关系模式,解决冗余和异常问题。
- 规范化理论
- 函数依赖(Functional Dependency, FD):
- 在一个关系模式\( R(U) \)中,\( U \)是属性集,\( X \)和\( Y \)是\( U \)的子集。如果对与\( R \)的任意两个元组\( t{1},t{2} \),当它们在\( X \)上的属性值相同时则在\( Y \)上必相同,则称\( X \)函数决定\( Y \),记为 \( X \rightarrow Y \)。
类型 定义 示例 完全函数依赖 \( Y \) 完全依赖于 \( X \),即 \( X \rightarrow Y \),且 \( X \) 的任意真子集无法决定 \( Y \)。 \( (\text{学号}, \text{课程号}) \rightarrow \text{成绩} \)(成绩由学号和课程号共同决定) 部分函数依赖 \( Y \) 部分依赖于 \( X \),即存在 \( X \) 的真子集 \( X' \) 满足 \( X' \rightarrow Y \)。 若 \( \text{学号} \rightarrow \text{姓名} \),则 \( (\text{学号}, \text{课程号}) \rightarrow \text{姓名} \) 是部分依赖 传递函数依赖 若 \( X \rightarrow Y \),\( Y \rightarrow Z \),且 \( Y \nrightarrow X \),则 \( X \rightarrow Z \) 是传递依赖。 学号 → 所属学院,所属学院 → 院长,则学号 → 院长 是传递依赖
- 在一个关系模式\( R(U) \)中,\( U \)是属性集,\( X \)和\( Y \)是\( U \)的子集。如果对与\( R \)的任意两个元组\( t{1},t{2} \),当它们在\( X \)上的属性值相同时则在\( Y \)上必相同,则称\( X \)函数决定\( Y \),记为 \( X \rightarrow Y \)。
- 范式(Normal Form):
范式 要求 解决的问题 1NF 原子性(属性不可再分) 消除重复字段 2NF 消除非主属性对候选码的部分依赖 减少数据冗余(将部分依赖的属性单独建表) 3NF 消除非主属性对候选码的传递依赖 避免更新异常(将传递依赖的属性拆分到新表) BCNF 消除主属性对候选码的部分/传递依赖(所有决定因素必为候选码) 更强的3NF - 判断与分解:给定关系模式,判断范式级别,并通过投影分解达到更高范式。
- 闭包计算:求属性集 \( X \) 在函数依赖集 \( F \) 下的闭包 \( X^+ \),即所有能被 \( X \) 决定的属性集合。
- 函数依赖(Functional Dependency, FD):
- 考试高频题型与解法
- 判断候选码
- 步骤:
- 找出所有可能的候选码(最小属性集能决定所有属性)。
- 利用闭包计算验证候选码是否满足 \( X^+ = U \)。
- 示例:
关系模式 \( R(A,B,C,D) \),函数依赖集 \( F = \{ A \rightarrow B, B \rightarrow C, D \rightarrow B \} \),求候选码。
答案:候选码为 \( AD \)(因为 \( AD^+ = ABCD \))。
- 步骤:
- 判断范式级别
- 步骤:
- 判断是否满足1NF(属性原子性)。
- 找候选码,判断是否存在部分依赖(不满足2NF)或传递依赖(不满足3NF)。
- 检查是否所有决定因素均为候选码(满足BCNF)。
- 示例:
关系模式 \( R(学号, 课程号, 成绩, 姓名) \),函数依赖集 \( F = \{ (\text{学号}, 课程号) \rightarrow 成绩, 学号 \rightarrow 姓名 \} \)。
答案:候选码为 \( (\text{学号}, 课程号) \),存在非主属性“姓名”对候选码的部分依赖,故仅满足1NF。
- 步骤:
- 模式分解
- 目标:消除冗余和异常,满足更高范式。
- 原则:
- 保持函数依赖(分解后的子模式函数依赖集覆盖原依赖)。
- 无损连接(分解后的表通过自然连接可恢复原表)。
- 示例:将上述示例分解为2NF:
- \( R1(\text{学号}, 课程号, 成绩) \)(满足2NF)。
- \( R2(\text{学号}, 姓名) \)(满足2NF)。
- 典型例题
- 题目:关系模式 \( R(A,B,C,D) \),函数依赖集 \( F = \{ A \rightarrow B, B \rightarrow C, C \rightarrow D \} \),判断其最高范式级别。
- 解析:
- 候选码为 \( A \)(\( A^+ = ABCD \))。
- 非主属性 \( B, C, D \) 均传递依赖于候选码 \( A \),故仅满足2NF(未消除传递依赖)。
- 答案:2NF。
- 判断候选码
四、事务与并发控制
- 事务ACID特性
- 原子性(Atomicity):事务要么全执行,要么全不执行。
- 一致性(Consistency):事务前后数据库状态一致。
- 隔离性(Isolation):并发事务互不干扰。
- 持久性(Durability):事务提交后结果永久保存。
- 并发问题
- 丢失更新:两个事务同时修改同一数据,后提交的覆盖先提交的。
- 脏读:读取到未提交的数据。
- 不可重复读:同一事务内两次读取结果不同(数据被修改)。
- 幻读:同一事务内两次查询结果集不同(数据被插入/删除)。
- 封锁协议
- 共享锁(S锁):读锁,允许多事务同时读取。
- 排他锁(X锁):写锁,独占数据。
- 两段锁协议(2PL):事务分为加锁阶段和解锁阶段,避免死锁。
- 隔离级别:读未提交、读已提交(解决脏读)、可重复读(解决不可重复读)、串行化(解决幻读)。
- 故障与恢复
- 日志技术:Undo(撤销未提交事务)、Redo(重做已提交事务);
- 检查点机制:减少恢复时间。
五、其他高频考点
- 视图(View)
- 作用:简化查询、数据安全(隐藏敏感字段)。
- 更新限制:视图的更新需满足特定条件。
- 存储过程与触发器
- 存储过程:预编译的SQL代码块,提高执行效率。
- 触发器:由事件(如
INSERT
、UPDATE
)自动触发的特殊存储过程。
- 分布式数据库与NoSQL
- 分布式数据库:数据分片存储,支持水平扩展、CAP理论(一致性、可用性、分区容忍性)。
- NoSQL类型:键值存储(Redis)、文档数据库(MongoDB)、列族数据库(HBase)、图数据库(Neo4j)。
- 大数据技术
- Hadoop:分布式存储(HDFS)与计算(MapReduce)。
- Spark:内存计算,适合迭代分析。
- 其他
- SQL优化:避免全表扫描(使用索引)、优化子查询。
- 事务隔离级别:读未提交、读已提交、可重复读、串行化。
- 索引设计:B+树索引、哈希索引的适用场景。
- 数据库安全:角色权限管理、SQL注入防范。
附:真题示例
- 2023年真题:
-- 查询选修了“数据库”课程的学生姓名 SELECT S.name FROM Student S, Course C, SC WHERE S.sid = SC.sid AND C.cid = SC.cid AND C.cname = '数据库';
- 2021年真题:判断关系模式R(A,B,C,D)的函数依赖集是否满足3NF。
END .
相关系列文章
- 软件设计师考试 - 网络与信息安全
- 软件设计师考试 - 系统开发与运行维护
- 软件设计师考试 - 程序设计语言
- 软件设计师考试 - 面向对象技术
- 软件设计师考试 - 数据库技术
- 软件设计师考试 - 数据结构与算法
- 软件设计师考试 - 软件工程
- 软件设计师考试 - 计算机组成与体系结构
- 软件设计师考试 - 计算机科学基础知识
- 软件设计师考试 - 考点总结