数据库原理 · 知识清单
数据库原理 · 知识清单
一、关系数据库核心概念 必考
1.1 关系的基本定义
| 术语 | 形式化定义 | 通俗理解 |
| 域(Domain) | 一组具有相同数据类型的值的集合 | 取值范围,如「整数」「{男,女}」 |
| 笛卡尔积 | D1×D2×...×Dn | 所有可能的组合 |
| 关系(Relation) | 笛卡尔积的有限子集 | 一张二维表 |
| 元组(Tuple) | 关系中的一行 | 一条记录 |
| 属性(Attribute) | 关系中的一列 | 一个字段 |
| 分量(Component) | 元组中的一个属性值 | 单元格的值 |
1.2 关系的六大性质
- 列是同质的——同一列数据类型相同
- 不同的列可出自同一个域,但列名不可重复
- 列的顺序无关紧要
- 行的顺序无关紧要
- 关系中不允许有完全相同的行
- 每一个分量必须是不可再分的原子值(1NF要求)
二、码(键)的完整体系 必考·高频
2.1 键的分类
| 键类型 | 定义 | 数量 | 能否为空 |
| 超码(Super Key) | 能唯一标识元组的属性集 | 多个 | — |
| 候选码(Candidate Key) | 最小的超码(去掉任何属性就不再是超码) | ≥1个 | 不能为空 |
| 主码(Primary Key) | 从候选码中选择的一个 | 1个 | 不能为空 |
| 外码(Foreign Key) | 参照另一个关系主码的属性 | 多个 | 可以为空 |
2.2 主属性 vs 非主属性 必须分清
| 分类 | 定义 | 示例 |
| 主属性 | 包含在任一候选码中的属性 | R(A,B,C), 候选码A和(B,C) → 主属性={A,B,C} |
| 非主属性 | 不包含在任何候选码中的属性 | R(A,B,C,D), 候选码A → 非主属性={B,C,D} |
易错:主属性 ≠ 主码中的属性!当有多个候选码时,所有候选码中的属性都是主属性。
三、关系完整性约束 必考
| 类型 | 约束对象 | 规则 | 违反示例 |
| 实体完整性 | 主码 | 主码值唯一且非空 | 插入重复学号、学号为NULL |
| 参照完整性 | 外码 | 外码值=NULL 或 =被参照表主码值 | 选课表中出现不存在的学号 |
| 用户定义完整性 | 自定义 | 按业务规则灵活定义 | 性别非男/女、年龄负数 |
三种完整性的区别记忆
- 实体完整性 → 自己的主码不能空不能重
- 参照完整性 → 外码要么空、要么指向真实存在的主码
- 用户定义完整性 → 业务规则(如成绩0~100、性别枚举)
四、关系代数 重点·SQL基础
4.1 基本运算
| 运算 | 符号 | 说明 | SQL对应 |
| 选择 | σ条件(R) | 选出满足条件的行 | WHERE |
| 投影 | π属性列表(R) | 选出指定列,自动去重 | SELECT DISTINCT |
| 连接 | R ⋈条件 S | 按条件连接两表 | JOIN ON |
| 自然连接 | R ⋈ S | 同名等值连接+去重列 | NATURAL JOIN |
| 并 | R ∪ S | 两表所有行(去重) | UNION |
| 交 | R ∩ S | 两表共同行 | INTERSECT |
| 差 | R - S | R有但S没有的行 | EXCEPT |
| 除 | R ÷ S | 找出R中匹配S所有值的元组 | NOT EXISTS嵌套 |
4.2 外连接
- 左外连接:保留左表所有行,右表无匹配填NULL
- 右外连接:保留右表所有行,左表无匹配填NULL
- 全外连接:两边都保留,无匹配填NULL
五、SQL 查询语句 必考·大题
5.1 完整语法
SELECT [DISTINCT] 列名 | 聚合函数
FROM 表名 [JOIN 表 ON 条件]
[WHERE 行条件]
[GROUP BY 分组列 [HAVING 分组条件]]
[ORDER BY 排序列 [ASC|DESC]]
5.2 聚合函数与分组
| 函数 | 说明 | 忽略NULL? |
| COUNT(*) | 统计行数 | 含NULL行 |
| COUNT(列) | 统计该列非空值数 | 忽略NULL |
| SUM(列) | 求和 | 忽略NULL |
| AVG(列) | 平均值 | 忽略NULL |
| MAX/MIN(列) | 最大/最小值 | 忽略NULL |
WHERE 对原始行过滤 → GROUP BY 分组 → HAVING 对分组结果过滤。WHERE不能用聚合函数,HAVING可以用。
5.3 嵌套子查询
- IN / NOT IN:判断值是否在子查询结果中
- EXISTS / NOT EXISTS:判断子查询是否有结果
- ANY / ALL:与子查询结果比较(>ALL = 大于所有)
5.4 LIKE 模糊查询
- %:匹配任意长度字符
- _:匹配单个字符
- 例:
WHERE name LIKE '张%'(姓张的)
六、函数依赖 必考·计算
6.1 函数依赖分类
| 类型 | 条件 | 示例 |
| 平凡依赖 | Y ⊆ X | (学号,姓名)→姓名 |
| 非平凡依赖 | Y ⊄ X | 学号→姓名 |
| 完全依赖 | X→Y,且X的任何真子集都不能决定Y | (学号,课程号)→成绩 |
| 部分依赖 | X→Y,但X的某个真子集也能→Y | (学号,课程号)→姓名(冗余!学号→姓名) |
| 传递依赖 | X→Y, Y→Z, 且Y⊄X, Y↛X | 学号→班级, 班级→班主任 → 学号→班主任是传递 |
6.2 Armstrong公理系统
- 自反律:若Y⊆X⊆U,则X→Y
- 增广律:若X→Y,则XZ→YZ
- 传递律:若X→Y, Y→Z,则X→Z
6.3 属性闭包计算 必考大题
定义:属性集X在函数依赖集F下能决定的所有属性的集合,记为X⁺。
算法:
- 初始化 result = X
- 遍历F中每个依赖A→B,若A ⊆ result,则result = result ∪ B
- 重复步骤2直到result不再变化
- 输出result = X⁺
示例:F={A→B, B→C, CD→E},求A⁺
A⁺={A} → {A,B}(用A→B)→ {A,B,C}(用B→C)→ {A,B,C}(CD→E不满足条件,停止)= ABC
七、范式与规范化 必考·大题
7.1 范式层级递进
| 范式 | 核心要求 | 消除的问题 | 判断标准 |
| 1NF | 属性原子性(不可再分) | — | 所有属性都是简单值 |
| 2NF | 非主属性完全依赖于候选码 | 部分函数依赖 | 不存在非主属性对码的部分依赖 |
| 3NF | 非主属性不传递依赖于候选码 | 传递函数依赖 | 每个非主属性都不传递依赖于码 |
| BCNF | 每个决定因素都包含候选码 | 主属性间的部分/传递依赖 | 对于每个非平凡FD X→Y,X必包含候选码 |
7.2 数据冗余导致的问题(为什么需要规范化)
- 插入异常:想插入某信息但因缺其他数据无法插入
- 删除异常:删除某信息时丢失了不该删的数据
- 更新异常:修改一个事实需要修改多处,容易不一致
- 数据冗余:相同数据重复存储
7.3 模式分解原则
- 无损连接分解:分解后自然连接能恢复原关系
- 保持函数依赖:原F中的每个依赖都能在某个分解后的关系中被蕴含
八、数据库设计 重点·综合
8.1 ER图基本要素
| 要素 | 图形 | 示例 |
| 实体 | 矩形 | 学生、课程 |
| 属性 | 椭圆 | 学号、姓名 |
| 联系 | 菱形 | 选课、任教 |
| 联系类型 | 1:1 / 1:N / M:N | 标在连线旁 |
8.2 ER图→关系模式转换规则
- 1:1联系:可将任一方主码+联系属性放入另一方
- 1:N联系:将1方主码+N方联系属性放入N方
- M:N联系:新建关系,包含两方主码+联系属性
- 多元联系:新建关系,包含所有参与实体主码+联系属性
考前速记40条
- 关系=表,元组=行,属性=列,分量=单元格
- 候选码是最小的超码
- 主属性∈任一候选码,非主属性∉任何候选码
- 实体完整性:主码唯一非空
- 参照完整性:外码=NULL或=被参照表主码
- 完整性共三种:实体+参照+用户定义
- 选择σ=WHERE,投影π=SELECT DISTINCT
- 自然连接=同名等值连接+去重列
- %匹配任意字符串,_匹配单个字符
- WHERE不能用聚合函数,HAVING可以
- COUNT(*)含NULL,COUNT(列)不含NULL
- 平凡依赖:Y⊆X
- 部分依赖:X的某个真子集也能→Y
- 完全依赖:X的任何真子集都不能→Y
- 传递依赖:X→Y→Z且Y⊄X
- Armstrong三律:自反、增广、传递
- 属性闭包X⁺:X能决定的所有属性集合
- 1NF:属性不可再分
- 2NF:消除部分依赖
- 3NF:消除传递依赖
- BCNF:所有决定因素都包含候选码
- 规范化解决:插入/删除/更新异常+冗余
- 分解要求:无损连接+保持函数依赖
- ER图:实体=矩形,属性=椭圆,联系=菱形
- 1:1 → 任一方加外码;1:N → N方加外码
- M:N → 新建关系,含两方主码
- 关系中行列无序,列名不重复
- 外码可以为空
- 候选码的并集不等于主码
- 至少有一个候选码,但只有一个主码
- 函数依赖是数据的内在约束
- 左外连接保留左表所有行
- DISTINCT去重
- ORDER BY默认升序ASC
- GROUP BY后SELECT只能出现分组列和聚合
- 子查询中IN效率低于EXISTS(相关子查询除外)
- DROP删除结构,DELETE删除数据,TRUNCATE清空表
- 视图是虚表,不存储数据
- 索引加速查询但减慢增删改
- 事务特性ACID:原子性、一致性、隔离性、持久性