数据库系统原理(04735) · 数据库系统与三级模式至SQL、索引与视图的职责
先理解数据如何建模,再设计表和约束,最后学习数据库编程、并发与恢复。SQL 增删改查集中在 MySQL 入门课程,本篇保留原理与设计方法,避免重复铺一遍命令。
数据库系统原理(04735)
先理解数据如何建模,再设计表和约束,最后学习数据库编程、并发与恢复。SQL 增删改查集中在 MySQL 入门课程,本篇保留原理与设计方法,避免重复铺一遍命令。
数据库系统与三级模式
数据库是按一定模型组织的数据;DBMS 提供定义、查询、更新、并发控制与恢复等能力。数据库系统还包括应用、使用者及运行环境,不能把数据库文件与整个系统当成同一个概念。
外模式、模式与内模式
| 层次 | 描述 | 例子 |
|---|---|---|
| 外模式 | 某类用户看到的数据视图 | 客服只能查看客户基本资料 |
| 模式 | 全局逻辑结构和约束 | 客户、订单及其关联 |
| 内模式 | 数据的物理组织与存储 | 数据页、文件、索引布局 |
外模式/模式映射支持逻辑独立性:逻辑结构调整时尽量不影响应用视图。模式/内模式映射支持物理独立性:存储组织变化时尽量不影响逻辑模式。
C/S 与 B/S 描述应用部署结构;三级模式描述数据抽象层次,两者不是同一套分层。
从业务对象到关系模型
概念、逻辑与物理模型
建模先识别实体、属性与联系,再将概念模型转换成关系表,最后选择字段类型、索引及存储方式。数据模型共同关心数据结构、数据操作和完整性约束。
E-R 图通常用矩形表示实体、椭圆表示属性、菱形表示联系。层次、网状、关系、面向对象等逻辑模型是不同组织方式,不要将 E-R 图直接当成建表语句。

表、元组、属性与键
| 概念 | 含义 |
|---|---|
| 关系 / 元组 / 属性 | 表 / 行 / 列 |
| 域 | 一个属性允许的取值范围 |
| 候选键 | 能唯一标识元组的最小属性集合,可以有多个 |
| 主键 | 从候选键中选定的一个;可能由多列组成 |
| 主属性 | 属于任意候选键的属性 |
| 外键 | 引用另一关系或本关系候选键的属性集合 |
| 全键 | 所有属性构成候选键的情况 |
关系模式描述结构,关系实例是某一时刻的数据。理论关系不依赖行列排列顺序;SQL 查询如需固定结果顺序必须写 ORDER BY。SQL 表允许的重复与空值也应通过约束明确。
关系代数如何对应查询
| 运算 | 解决的问题 | SQL 中常见表达 |
|---|---|---|
选择 σ | 留下满足条件的行 | WHERE |
投影 π | 取需要的属性 | 选择列;理论投影会去重 |
连接 ⋈ | 按关联条件组合记录 | JOIN ... ON |
| 并、交、差 | 合并共同结构的集合 | 集合运算,具体支持与版本有关 |
| 笛卡尔积 | 两侧全部组合 | CROSS JOIN |
| 除 | “满足全部条件”的对象 | 常用两层不存在判断等方式表达 |
关系代数中的集合语义与 SQL 默认多重集语义有区别,不能忽略重复记录对统计的影响。
用函数依赖消除冗余与异常
先找依赖,再判断范式
X → Y 表示 X 的值确定 Y 的值。完全依赖表示 Y 依赖整个 X;若 X 的真子集已能确定 Y,则是部分依赖。传递依赖需要结合候选键与非主属性判断。
例如 选课(学号, 姓名, 课程号, 课程名, 成绩),候选键可为 (学号, 课程号):
学号 → 姓名,课程号 → 课程名:非主属性只依赖组合键的一部分。- 同一学生或课程名称重复存多次,会产生更新、插入、删除异常。
- 拆成
学生(学号, 姓名)、课程(课程号, 课程名)、选课(学号, 课程号, 成绩),将不同事实分别存储。
1NF、2NF、3NF 与 BCNF
| 范式 | 检查重点 |
|---|---|
| 1NF | 每个属性值在当前数据模型中不可再分,不在一个单元格塞重复组 |
| 2NF | 满足 1NF,非主属性完全依赖候选键,消除对组合键的部分依赖 |
| 3NF | 对每个非平凡依赖 X → A,X 是超键或 A 是主属性;常见问题是非主属性经非键属性传递依赖于键 |
| BCNF | 每个非平凡函数依赖的决定因素都是超键,比 3NF 更严格 |
分解还要检查无损连接与依赖保持,不能只看表变小。反规范化应由明确查询瓶颈驱动,并说明冗余数据如何维护。
按设计流程落到表结构
需求分析到上线维护
- 需求分析:确定数据范围、读写流程、数据量、权限与一致性需求,形成数据字典和需求报告。
- 概念设计:识别实体、属性与联系,合并局部 E-R 模型并解决命名与含义冲突。
- 逻辑设计:转换成关系模型,确定候选键、外键及范式,再设计应用视图。
- 物理设计:按查询条件、排序及数据规模选择类型、索引和存储组织。
- 实施与试运行:建立结构、加载数据,验证功能、约束和性能。
- 运行维护:监测容量、慢查询、备份恢复及结构变更,持续评估影响。
新奥尔良方法、E-R 方法与基于规范化的设计,分别强调阶段、概念表达与关系分解;实际设计可结合使用,不必反复列同一套六步流程。
一对一、一对多与多对多转换
- 一对一:可在一侧保存另一侧的键并加唯一约束;是否合表取决于生命周期、空值与权限。
- 一对多:通常在“多”的一侧保存“一”的键,例如订单保存客户编号。
- 多对多:增加关系表,保存两侧键和联系自身的属性,并限制关系重复。
例如师生联系用关系表表达,不能把多个教师编号拼进学生表的一个字段。逻辑上有关联不代表数据库会自动校验;是否使用实际外键需明确系统边界。
SQL、索引与视图的职责
各类 SQL 各做什么
| 类别 | 典型语句 | 核心目的 |
|---|---|---|
| 数据定义 | CREATE、ALTER、DROP | 定义数据库对象 |
| 查询与更新 | SELECT、INSERT、UPDATE、DELETE | 读取和修改数据 |
| 权限控制 | GRANT、REVOKE | 授予与撤回权限 |
| 事务控制 | START TRANSACTION、COMMIT、ROLLBACK | 组织工作单元 |
SQL 标准与产品扩展要区分;MySQL 的 LIMIT、客户端 DELIMITER 等不能直接当成所有数据库通用语法。
索引与视图
索引支持特定访问路径,同时占空间并增加写入成本;普通、唯一、组合索引的作用不同。用真实查询和执行计划评估,不能把“建索引”当成所有性能问题的解法。
视图保存查询定义,用于复用查询、提供稳定视角或限制可见列;普通视图不自动复制结果数据。可更新性取决于查询结构,WITH CHECK OPTION 检查通过可更新视图写入的行是否仍满足条件。权限隔离还需配置实际授权。
SQL 的可运行示例统一见 MySQL 入门 与 查询语法和函数。
继续阅读
- 专题笔记
- 专题笔记
- 知识专题