# 数据库原理

# 数据库原理

### **一、填空题核心考点（扩展版）**

1. **数据库系统组成**
    - 数据库系统由 **数据库（DB）**、**数据库管理系统（DBMS）**、**应用程序**、**数据库管理员（DBA）** 和 **用户** 组成。
    - DBMS 的功能包括 **数据定义、数据操纵、数据库运行管理、数据组织存储、数据库维护**。
2. **数据模型**
    - 概念数据模型（如 **ER模型**）的三个基本要素是 **实体**、**属性** 和 **联系**（一对一、一对多、多对多）。
    - 关系数据模型中，关系的三个类型是 **基本表（基表）**、**视图（虚表）** 和 **查询表**。
    - 数据模型的三要素：**数据结构**、**数据操作**、**数据完整性约束**。
3. **关系数据库**
    - 关系代数的基本运算包括 **并、差、笛卡尔积、投影、选择**。
    - SQL 语言中，**HAVING** 子句用于筛选分组后的结果，**WHERE** 子句用于筛选行。
4. **SQL 语言**
    - DDL（数据定义语言）命令：`CREATE`、`ALTER`、`DROP`。
    - DML（数据操纵语言）命令：`INSERT`、`UPDATE`、`DELETE`、`SELECT`。
    - DCL（数据控制语言）命令：`GRANT`、`REVOKE`。
5. **事务与并发控制**
    - 事务的四个特性（ACID）：**原子性**（All or Nothing）、**一致性**（Consistency）、**隔离性**（Isolation）、**持久性**（Durability）。
    - 并发控制的主要技术：**封锁**、**时间戳**、**乐观控制法**、**多版本并发控制**。
6. **数据库安全与保护**
    - 数据库安全性控制方法：**用户标识与鉴别**、**存取控制**（如 `GRANT`/`REVOKE`）、**审计**、**视图**、**数据加密**。
    - 数据库恢复技术：**事务日志**、**数据转储**（全量转储、增量转储）、\*\* checkpoint（检查点）\*\*。

### **二、简答题核心考点（扩展版）**

#### **1. 数据库设计步骤（详细版）**

**答案**：  
数据库设计分为以下阶段，每个阶段的目标和输出如下：

1. **需求分析**： 
    - 目标：收集用户需求，明确系统功能。
    - 输出：数据字典（描述数据项、数据结构）、数据流图（DFD）。
2. **概念结构设计**： 
    - 目标：设计 ER 模型，描述实体及联系。
    - 工具：ER 图（实体用矩形，属性用椭圆，联系用菱形）。
3. **逻辑结构设计**： 
    - 目标：将 ER 模型转换为关系模式（如转换为二维表）。
    - 规则：实体转换为表，联系根据类型转换为外键或关联表。
4. **物理结构设计**： 
    - 目标：定义索引、存储结构（如聚簇索引）、分区策略。
    - 优化：考虑查询效率、存储空间、事务处理速度。
5. **数据库实施**： 
    - 目标：编写 SQL 代码，建立数据库并测试。
    - 步骤：创建表、插入数据、编写存储过程/触发器、性能调优。
6. **数据库运行与维护**： 
    - 目标：优化性能，调整结构。
    - 工作：备份与恢复、安全性检查、索引重建、查询优化。

#### **2. 关系代数运算（复杂查询）**

**题目**：用关系代数表达式表示“查询选修了课程号为C1且成绩大于80分的学生学号和姓名”。  
**答案**：  
假设学生关系为 `Student(Sno, Sname)`，选课关系为 `SC(Sno, Cno, Grade)`，则表达式为：  
`π_{Sno, Sname}(Student ⨝ SC ⨝ σ_{Cno='C1' ∧ Grade>80}(SC))`  
（先连接学生和选课表，选择符合条件的元组，再投影学号和姓名）

#### **3. 范式判断与分解（综合题）**

**题目**：判断关系模式 `R(A,B,C,D,E)` 满足第几范式，并分解为 BCNF。  
**假设**：

- 函数依赖集：`A→B, BC→D, D→E, E→A`
- 主键为 `A`

**答案**：

1. **判断范式**： 
    - **1NF**：满足（属性不可再分）。
    - **2NF**：不满足。 
        - 非主属性 `B` 完全依赖于主键 `A`（无部分依赖），但 `D`、`E` 存在传递依赖（`A→B→D→E→A`）。
    - **3NF**：不满足（存在传递依赖）。
    - **BCNF**：不满足（存在非主键决定因素，如 `BC→D`）。
2. **分解为 BCNF**： 
    - 分解步骤： 
        - 分解 `R1(A,B)`（主键 A，满足 BCNF）。
        - 分解 `R2(B,C,D)`（主键 BC，满足 BCNF）。
        - 分解 `R3(D,E)`（主键 D，满足 BCNF）。
        - 分解 `R4(E,A)`（主键 E，满足 BCNF）。
    - 最终关系模式：`R1, R2, R3, R4`。

#### **4. 并发控制与封锁协议（详细解释）**

**题目**：简述三级封锁协议及其解决的问题。  
**答案**：  
三级封锁协议是并发控制中保证数据一致性的规则：

1. **一级封锁协议（修改数据时加X锁）**： 
    - 事务在修改数据前加排他锁（X锁），直到事务结束释放。
    - 解决：**丢失修改** 问题（两个事务同时修改同一数据，后提交的事务覆盖前者）。
2. **二级封锁协议（一级 + 读取数据时加S锁）**： 
    - 事务在读取数据前加共享锁（S锁），读完后立即释放。
    - 解决：**脏读** 问题（事务读取未提交的数据）。
3. **三级封锁协议（一级 + 读取数据时加S锁，事务结束释放）**： 
    - 事务在读取数据前加共享锁，直到事务结束释放。
    - 解决：**不可重复读** 问题（事务两次读取同一数据，中间被其他事务修改）。

#### **5. 索引类型与优化（综合题）**

**题目**：比较 B+ 树索引和哈希索引的优缺点，并说明适用场景。  
**答案**：

<table class="table-container__IBL8LtMe" id="bkmrk-%E7%89%B9%E6%80%A7-b%2B-%E6%A0%91%E7%B4%A2%E5%BC%95-%E5%93%88%E5%B8%8C%E7%B4%A2%E5%BC%95-%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84-"><thead><tr><th>**特性**</th><th>**B+ 树索引**</th><th>**哈希索引**</th></tr></thead><tbody><tr><td>**数据结构**</td><td>树形结构（有序）</td><td>哈希表（无序）</td></tr><tr><td>**查询效率**</td><td>高效（支持范围查询）</td><td>高效（等值查询）</td></tr><tr><td>**适用场景**</td><td>频繁范围查询、排序操作</td><td>频繁等值查询、无排序需求</td></tr><tr><td>**存储空间**</td><td>占用较大（存储树结构）</td><td>占用较小（存储哈希函数）</td></tr><tr><td>**动态调整**</td><td>支持动态扩容（树分裂）</td><td>哈希冲突时需扩容（性能下降）</td></tr></tbody></table>