# 计算机考研复试--关系数据库核心知识点终极整理 ## 一、关系模型三要素 ### 1. 数据结构(二维表) - **关系**:由行(元组)和列(属性)组成的二维表,每个属性不可再分(1NF) - **键**: - **候选键**:能唯一标识元组的最小属性集(如学号) - **主键**:从候选键中选定的唯一标识(非空且唯一) - **外键**:参照其他表主键的属性(保证参照完整性) - **域**:属性的取值范围(如性别域为{'男','女'}) ### 2. 数据操作(关系代数与SQL) - **基本操作**: - **选择(σ)**:筛选满足条件的行(如σ_{age>20}(Student)) - **投影(π)**:选取指定列(如π_{name,age}(Student)) - **连接(⋈)**: - **自然连接**:自动去重相同属性(如Student ⋈ SC) - **外连接**:保留未匹配元组(左/右/全外连接) - **除法(÷)**:查找满足所有条件的元组(如选所有课的学生) - **集合操作**:并(∪)、差(-)、交(∩)、笛卡尔积(×) ### 3. 完整性约束 - **实体完整性**:主键非空且唯一(如学号不能为空) - **参照完整性**:外键必须为其他表主键或空值(如课程号必须存在) - **用户定义完整性**:自定义规则(如年龄≥18) --- ## 二、关系代数与SQL高频考点 ### 1. 关系代数表达式 - **典型题型**:写出查询的关系代数表达式 **示例**:查询选修"数据库"课程的学生姓名 `π_{Sname}(σ_{Cname='数据库'}(Course ⋈ SC ⋈ Student))` ### 2. SQL核心操作 - **DDL**: ```sql CREATE TABLE Student ( Sno CHAR(9) PRIMARY KEY, Sname VARCHAR(20) NOT NULL ); ``` - **DML**: ```sql -- 插入 INSERT INTO SC VALUES ('2021001', 'C001', 90); -- 更新 UPDATE Student SET Sage=Sage+1 WHERE Sdept='CS'; -- 删除 DELETE FROM SC WHERE Grade < 60; ``` - **查询**: ```sql -- 嵌套查询 SELECT Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno='C01'); -- 连接查询 SELECT Sname, Cname FROM Student NATURAL JOIN SC JOIN Course USING(Cno); ``` --- ## 三、范式理论与设计 ### 1. 范式递进规则 | **范式** | **要求** | **消除依赖类型** | | -------- | --------------------------------- | ---------------------------------- | | 1NF | 属性不可再分 | - | | 2NF | 消除非主属性对主属性的部分依赖 | 部分函数依赖(如学号→姓名) | | 3NF | 消除非主属性的传递依赖 | 传递函数依赖(如学号→系名→系地址) | | BCNF | 消除主属性对候选键的部分/传递依赖 | 所有非平凡函数依赖左侧包含候选键 | ### 2. 设计实例 - **反例**:学生表(学号,姓名,系名,系主任) **问题**:存在传递依赖(学号→系名→系主任) **解决**:拆分为学生表(学号,姓名,系名) + 系表(系名,系主任) --- ## 四、事务与并发控制 ### 1. ACID特性 - **原子性**:事务全做或全不做(UNDO日志实现) - **一致性**:事务前后数据状态合法(如转账总额不变) - **隔离性**:事务间互不干扰(通过锁机制实现) - **持久性**:提交后永久生效(REDO日志实现) ### 2. 并发问题与解决方案 | **问题** | **描述** | **封锁协议** | | ---------- | ------------------------ | ----------------------------- | | 丢失修改 | 后提交覆盖前提交结果 | 一级封锁协议(X锁到事务结束) | | 脏读 | 读取未提交的无效数据 | 二级封锁协议(S锁立即释放) | | 不可重复读 | 同一事务两次读取结果不同 | 三级封锁协议(S锁到事务结束) | | 幻读 | 范围查询结果数量变化 | 间隙锁(锁定范围) | --- ## 五、高频考点速记表 1. **视图作用**:简化查询、数据安全、逻辑独立性 2. **索引类型**: - B+树:适合范围查询(如WHERE age>20) - Hash:适合等值查询(如WHERE id=1001) 3. **存储过程 vs 触发器**: - 存储过程:预编译SQL集合,需显式调用 - 触发器:事件驱动(如INSERT后自动更新统计) 4. **E-R图转换规则**: - 1:1联系:合并到任一实体表 - 1:n联系:在多方表添加外键 - m:n联系:新建关联表保存双方主键