【数据库技术】复习日:关系代数 + SQL + 规范化(整理对比表)

适合读者:软考中级备考同学

阅读时间:7分钟

内容:关系代数、SQL查询、规范化三大模块核心对比表、易错点、记忆口诀汇总

一、关系代数部分

1.1 基本运算速查表

运算 符号 操作对象 核心含义 SQL类比
选择 σ\sigmaσ 按条件筛选元组 WHERE
投影 π\piπ 选择指定属性 SELECT 列
∪\cup∪ 关系(整体) 两个关系的并集 UNION
−-− 关系(整体) 两个关系的差集 EXCEPT
笛卡尔积 ×\times× 关系(整体) 两表所有元组组合 CROSS JOIN

并相容性 :并、差运算要求两个关系属性个数相同对应属性域相同

1.2 连接运算对比

连接类型 连接条件 是否去重 是否保留未匹配元组 结果列数
等值连接 指定属性相等(可不同名) 两表列数之和
自然连接 同名属性自动相等 (同名属性只保留一列) 列数和 −-− 同名属性数
左外连接 指定条件 保留左表全部 两表列数之和
右外连接 指定条件 保留右表全部 两表列数之和
全外连接 指定条件 保留两表全部 两表列数之和

除运算(÷\div÷) :用于回答"所有"、"至少"类查询,R÷SR \div SR÷S 的结果是 RRR 中与 SSS 中所有元组都匹配的元组。

1.3 关系代数综合查询思路

步骤 操作 说明
第1步 识别涉及的表 查询涉及哪些关系
第2步 连接 把需要的表全部连接起来
第3步 选择(σ\sigmaσ) 筛选满足条件的行
第4步 投影(π\piπ) 选出需要输出的列
第5步 特殊处理 "所有"类查询用除运算或差运算

二、SQL查询部分

2.1 SQL语言分类

分类 核心命令 作用
DDL(数据定义语言) CREATEDROPALTER 定义数据库结构
DML(数据操纵语言) SELECTINSERTUPDATEDELETE 数据查询与更新
DCL(数据控制语言) GRANTREVOKE 权限管理
TCL(事务控制语言) COMMITROLLBACKSAVEPOINT 事务管理

2.2 SELECT语句执行顺序(重点!)

执行顺序 关键字 作用
1 FROM 确定数据来源
2 WHERE 筛选行(不能使用聚合函数
3 GROUP BY 分组
4 HAVING 筛选分组(可以使用聚合函数
5 SELECT 选择列、计算表达式
6 ORDER BY 排序

2.3 WHERE vs HAVING(必考辨析)

对比项 WHERE HAVING
执行时机 分组前 分组后
能否使用聚合函数 不能 可以
作用对象 单个元组(行) 分组后的组

2.4 嵌套查询关键词对比

关键词 含义 等价关系
IN 在子查询结果集合中 ---
NOT IN 不在子查询结果集合中 ---
EXISTS 子查询是否有返回行(相关子查询) ---
= ANY 等于子查询结果中的任意一个 等价于 IN
<> ALL 不等于子查询结果中的全部 等价于 NOT IN
> ANY 大于子查询结果中的最小值 ---
> ALL 大于子查询结果中的最大值 ---

IN vs EXISTSIN 是不相关子查询(先执行子查询),EXISTS 通常是相关子查询(外层每行执行一次)。子查询结果集小时用 IN,子查询结果集大时用 EXISTS

三、规范化部分

3.1 函数依赖的四种分类

类型 定义 示例
平凡函数依赖 Y⊆XY \subseteq XY⊆X (学号,姓名)→学号(学号, 姓名) \rightarrow 学号(学号,姓名)→学号
非平凡函数依赖 Y⊈XY \not\subseteq XY⊆X 学号 →\rightarrow→ 姓名
完全函数依赖 YYY 依赖于 XXX 的全部属性 (学号,课程号)→成绩(学号, 课程号) \rightarrow 成绩(学号,课程号)→成绩
部分函数依赖 YYY 依赖于 XXX 的某个真子集 (学号,课程号)→姓名(学号, 课程号) \rightarrow 姓名(学号,课程号)→姓名(只依赖学号)
传递函数依赖 X→YX \rightarrow YX→Y,Y→ZY \rightarrow ZY→Z,Y↛XY \not\rightarrow XY→X 学号 →\rightarrow→ 班级号 →\rightarrow→ 班级名称

软考只关心非平凡函数依赖 。部分依赖只可能出现在组合键中。

3.2 范式递进关系(重点!)

范式 要求 消除的问题
1NF 属性不可再分(原子性) 多值属性
2NF 1NF + 非主属性完全依赖于候选键 非主属性的部分函数依赖
3NF 2NF + 非主属性直接依赖于候选键 非主属性的传递函数依赖
BCNF 3NF + 所有FD的左部都包含候选键 主属性的传递/部分函数依赖
4NF BCNF + 消除非平凡多值依赖 多值依赖

三个关键结论

  • 满足 BCNF ⇒ 满足 3NF(反过来不一定)
  • 满足 3NF ⇒ 满足 2NF(反过来不一定)
  • 满足 4NF ⇒ 满足 BCNF(反过来不一定)

3.3 模式分解的两个核心性质

性质 含义 判断方法(二元分解)
无损连接性 分解后能通过自然连接还原原表 R1∩R2→R1R_1 \cap R_2 \rightarrow R_1R1∩R2→R1 或 R1∩R2→R2R_1 \cap R_2 \rightarrow R_2R1∩R2→R2
保持依赖性 分解后的FD集等价于原FD集 检查所有FD是否都能从投影FD推导出

重要原则无损连接必须满足,保持依赖尽量满足。

四、E-R图部分

4.1 E-R图三要素

要素 图形符号 含义
实体 矩形 现实世界中可区分的事物
属性 椭圆 实体的特征
联系 菱形 实体之间的联系

4.2 属性分类

属性类型 图形符号 转换规则
简单属性 椭圆 直接作为表的字段
复合属性 椭圆(子属性用椭圆连接) 拆分成多个子属性
多值属性 双椭圆 单独建表
派生属性 虚线椭圆 通常不存储

4.3 联系类型与转换规则

联系类型 E-R图标注 转换规则
1:1 两侧写 11 任一端加另一端的主键作为外键
1:N 两侧写 1N N端1端 的主键作为外键
M:N 两侧写 MN 新建独立关系,包含两端主键作为外键,组合成主键

五、事务与并发控制部分

5.1 ACID特性

特性 含义 实现技术
原子性 要么全做,要么全不做 Undo Log
一致性 约束不被破坏 DBMS约束 + 应用程序
隔离性 并发互不干扰 锁 + MVCC
持久性 提交后不丢失 Redo Log

5.2 并发事务的三种问题

问题 定义
丢失修改 后提交的事务覆盖先提交的修改
脏读 读到未提交事务的修改
不可重复读 同一事务内两次读取结果不一致

5.3 三级封锁协议

封锁协议 解决丢失修改 解决脏读 解决不可重复读
一级
二级
三级

六、易错点汇总

易错点 正确理解
选择(σ\sigmaσ)修改列,投影(π\piπ)修改行 选择改行,投影改列
自然连接会保留重复列 ❌ 自然连接去除重复列
外键不能为NULL ❌ 外键可以为NULL
WHERE中可以使用聚合函数 不能,HAVING才能用
= ANY 等价于 NOT IN = ANY 等价于 IN<> ALL 等价于 NOT IN
2NF消除了传递依赖 ❌ 2NF消除的是部分依赖 ,3NF才消除传递依赖
BCNF一定满足3NF 正确(BCNF是3NF的加强版)
4NF消除的是函数依赖 ❌ 4NF消除的是多值依赖
M:N联系在任一端加外键 ❌ M:N联系必须单独建表
无损连接和保持依赖都是必须的 无损连接必须满足,保持依赖尽量满足
二级封锁协议解决了不可重复读 ❌ 二级解决了脏读,三级才解决不可重复读

七、记忆口诀汇总

关系代数

选择选行σ\sigmaσ,投影选列π\piπ。

并差要求并相容,笛卡尔积行相乘。

自然连接同名连,去除重复留一边。

等值连接指定条件,同名异名都能连。

除运算

除运算找"所有",先投影出全集,再乘全部课程。

减去实际选课,缺课学号就出现。

全集减去缺课,就是全能选手。

SQL执行顺序

FROM最先WHERE后,GROUP BY在中间,

HAVING后筛组,SELECT选列,ORDER BY排最后。

WHERE vs HAVING

WHERE筛行分组前,HAVING筛组在分组后。

WHERE不能聚合函数,HAVING专治聚合条件。

规范化递进

1NF原子不可分,2NF消除部分依赖(组合键中部分决定),

3NF消除传递依赖(X→Y→ZX \rightarrow Y \rightarrow ZX→Y→Z),

BCNF补3NF漏(所有FD左部都含候选键),

4NF消除多值依赖。

E-R图转换

1:1任一端加外键,1:N在N端加,M:N必须单独建。

ACID

原子全做全不做(Undo),一致约束不能破。

隔离并发互不扰(锁+MVCC),持久提交不丢失(Redo)。

封锁协议

一级防丢失,二级加脏读,三级防重读。

🔔 本专栏日更,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #关系代数 #SQL #规范化 #数据库技术 #软考备考

相关推荐
维克兜率天1 小时前
【维克】特征归一化与标准化:为什么模型对数据的“尺度“很敏感?
人工智能·笔记·python·机器学习·量化
先吃饱再说2 小时前
从零开发到工程查询:SQLite 嵌入式数据库与高级 SQL 实战
数据库
摇滚侠2 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 31
android·spring boot·笔记
ShineWinsu2 小时前
对于MySQL:数据库的操作的解析
linux·数据库·c++·mysql·面试·笔试·库的操作
‎ദ്ദിᵔ.˛.ᵔ₎2 小时前
MySQL 数据类型
数据库·mysql
金字塔頂の蝸牛2 小时前
商务日语口语全手册(一)
笔记·日语·语言·外语
这个DBA有点耶2 小时前
索引合并不是万能药:MySQL同时用两个索引,为什么比不用还慢?
数据库·mysql·dba
从零开始的嵌入式之旅2 小时前
day36
linux·c语言·经验分享·笔记·嵌入式硬件
Aime_Perfect3 小时前
sqlserver AlwaysOn(一)
数据库·sqlserver