Skip to content

数据库系统原理(04735) · 数据库系统与三级模式至SQL、索引与视图的职责 ​

返回分篇目录

先理解数据如何建模,再设计表和约束,最后学习数据库编程、并发与恢复。SQL 增删改查集中在 MySQL 入门课程,本篇保留原理与设计方法,避免重复铺一遍命令。

数据库系统原理(04735) ​

先理解数据如何建模,再设计表和约束,最后学习数据库编程、并发与恢复。SQL 增删改查集中在 MySQL 入门课程,本篇保留原理与设计方法,避免重复铺一遍命令。

数据库系统与三级模式 ​

数据库是按一定模型组织的数据;DBMS 提供定义、查询、更新、并发控制与恢复等能力。数据库系统还包括应用、使用者及运行环境,不能把数据库文件与整个系统当成同一个概念。

外模式、模式与内模式 ​

层次描述例子
外模式某类用户看到的数据视图客服只能查看客户基本资料
模式全局逻辑结构和约束客户、订单及其关联
内模式数据的物理组织与存储数据页、文件、索引布局

外模式/模式映射支持逻辑独立性:逻辑结构调整时尽量不影响应用视图。模式/内模式映射支持物理独立性:存储组织变化时尽量不影响逻辑模式。

C/S 与 B/S 描述应用部署结构;三级模式描述数据抽象层次,两者不是同一套分层。

从业务对象到关系模型 ​

概念、逻辑与物理模型 ​

建模先识别实体、属性与联系,再将概念模型转换成关系表,最后选择字段类型、索引及存储方式。数据模型共同关心数据结构、数据操作和完整性约束。

E-R 图通常用矩形表示实体、椭圆表示属性、菱形表示联系。层次、网状、关系、面向对象等逻辑模型是不同组织方式,不要将 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 更严格

分解还要检查无损连接与依赖保持,不能只看表变小。反规范化应由明确查询瓶颈驱动,并说明冗余数据如何维护。

按设计流程落到表结构 ​

需求分析到上线维护 ​

  1. 需求分析:确定数据范围、读写流程、数据量、权限与一致性需求,形成数据字典和需求报告。
  2. 概念设计:识别实体、属性与联系,合并局部 E-R 模型并解决命名与含义冲突。
  3. 逻辑设计:转换成关系模型,确定候选键、外键及范式,再设计应用视图。
  4. 物理设计:按查询条件、排序及数据规模选择类型、索引和存储组织。
  5. 实施与试运行:建立结构、加载数据,验证功能、约束和性能。
  6. 运行维护:监测容量、慢查询、备份恢复及结构变更,持续评估影响。

新奥尔良方法、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 入门 与 查询语法和函数。

继续阅读