第02周 数据库三级模式体系结构与关系模型
第2周 | MySQL数据库 —— 数据库三级模式体系结构与关系模型
同一个数据库,教务员能查成绩、学生只能看课表——他们看到的「内容」为什么不一样?数据库底层又怎么做到「换硬盘、改存储」却不影响你写好的程序?这一周用两张图把这两个问题彻底讲清,并正式认识关系模型的术语。
一、三级模式:数据库对外有三张「脸」
数据库从「用户看到的」到「磁盘上存的」,分三个层次。记住一句总纲:一个数据库只有 1 个模式和 1 个内模式,但可以有多个外模式。
| 模式 | 别名 | 看什么 | 数量 | 一句话 |
|---|---|---|---|---|
| 模式 | 逻辑模式 / 概念模式 | 全体数据的全局逻辑结构 | 唯一 1 个 | 数据库的「总设计图」 |
| 外模式 | 子模式 / 用户模式 | 某个用户能看到的局部数据 | 可多个 | 总图裁出来的「用户视图」 |
| 内模式 | 存储模式 | 数据在磁盘上怎么存 | 唯一 1 个 | 最底层的「物理存储」 |
1.1 模式(Schema)
描述数据库中全体数据的逻辑结构和特征,是所有用户的公共数据视图。好比一栋楼的总图纸。
1.2 外模式(External Schema)
描述某个用户能看到和使用的局部逻辑结构,是模式的一个子集。不同用户权限不同,看到的外模式也不同(教务员看成绩视图,学生看选课视图)。
1.3 内模式(Internal Schema)
描述数据在数据库内部的物理存储方式(文件组织、索引、压缩等),最靠近硬件。
二、两级映像:靠它实现「数据独立性」
光有三级还不够,必须靠「两级映像」把三层连起来,才能做到改下层不影响上层。
外模式 A(教务员视图) 外模式 B(学生视图)
│ │
【外模式/模式映像】 【外模式/模式映像】
└──────────┬───────────────┘
模 式(全局逻辑,唯一)
│
【模式/内模式映像】
│
内模式(物理存储,唯一)
2.1 外模式 / 模式映像 → 逻辑数据独立性
定义外模式和模式之间的对应。当模式(全局逻辑)改变时,DBA 只改这层映像、保持外模式不变,用户程序就不用改。这就是逻辑数据独立性。
2.2 模式 / 内模式映像 → 物理数据独立性
定义模式和内模式之间的对应。当内模式(物理存储,比如换了硬盘、改了索引)改变时,只改这层映像、保持模式不变,应用程序照样不用改。这就是物理数据独立性。
一句话记:改「全局逻辑」不影响程序 → 逻辑独立;改「物理存储」不影响程序 → 物理独立。两级映像就是这两道「缓冲层」。
三、关系模型术语:一张表用专业话说
关系模型用二维表组织数据,先把「表里每样东西」的专业名记住:
| 术语 | 指什么 | 例子(student 表) |
|---|---|---|
| 关系(Relation) | 一张二维表 | 整个 student 表 |
| 元组(Tuple) | 表中的一行(一条记录) | 20260101 / 张三 / 17 / 25计应1班 这一行 |
| 属性(Attribute) | 表中的一列(一个字段) | sname 列 |
| 域(Domain) | 属性的取值范围(同一类型值的集合) | sage 取整数集合;sclass 取「XX班」集合 |
| 候选码(Candidate Key) | 能唯一标识一行的最小属性集 | sid |
| 主码(Primary Key) | 从候选码中选一个当「身份证」 | sid |
| 外码(Foreign Key) | 本表中引用另一张表主码的属性 | 选课表 sc.sid 参照 student.sid |
四、关系完整性:三道「红线」
数据不能乱填,关系模型用三条完整性规则兜底:
- 实体完整性:主码不能为空且不能重复。(每行都得有唯一身份)
- 参照完整性:外码要么为空,要么必须等于被参照表里某个主码值。(
sc.sid必须能在student里找到,不能凭空出现) - 用户定义完整性:针对具体业务的约束,如「成绩 0–100」「性别只能男/女」。
五、关系的基本性质:它和 Excel 表不一样
关系(二维表)有五条硬规矩,违反任何一条就不是「合格的关系」:
- 列同质:同一列的数据必须出自同一个域(同一类型)。
- 列名不同:不同列可以出自同一个域,但属性名必须不同。
- 行列顺序无关:行、列换个先后,表示的还是同一批数据。
- 行不重复:任意两行不能完全相同(由主码保证唯一)。
- 分量原子性:单元格(分量)不可再分——一个格子只能放一个值。这就叫第一范式(1NF)。
六、动手画:三级模式两级映像结构图(操作教程)
跟着画一遍,抽象就变具体:
- 在纸/白板上画三层横条:外模式(上)/ 模式(中)/ 内模式(下)。
- 在外模式层画两个小人:①教务员(能看到成绩)②学生(只能看课表)。
- 画两条映像线:外模式↔模式 标「外模式/模式映像」,模式↔内模式 标「模式/内模式映像」。
- 在右侧标注:上层映像失效会怎样?把「模式」改名叫
student_v2——只要映像跟着改,教务员和学生的程序一行都不用动(逻辑独立性)。 - 底层标注:把数据库从机械硬盘迁到 SSD、重排存储——只要映像跟着改,上面两层完全无感(物理独立性)。
![三级模式两级映像结构图(可替换为手绘照片)]
七、动手标:把 student 表映射成关系术语(操作教程)
下面这张表,逐项标出本周术语:
| sid | sname | sage | sclass |
|---|---|---|---|
| 20260101 | 张三 | 17 | 25计算机应用1班 |
| 20260102 | 李四 | 18 | 25计算机应用1班 |
- 关系=整张
student表;元组=任意一行;属性=sid/sname/sage/sclass任一列。 - 域:
sage取自整数集合,sclass取自「XX班」字符串集合。 - 主码=
sid(唯一标识每个学生)。 - 再加一张选课表
sc(sid, cid, score),其中sc.sid是外码,它参照student.sid——这就把两张表连起来了(参照完整性要求sc里的sid必须在student中存在)。
八、动手挑错:下面哪些是「不合格的关系」(操作教程)
判断并改:
- 表 A:
| 学号 | 姓名 | 家庭地址 |,家庭地址里写「广东,惠州」。 → 错:家庭地址一个格子放了「省+市」两个值,违反分量原子性(1NF)。应拆成省份、城市两列。 - 表 B:没有设主码,允许插入两条完全相同的行。 → 错:违反「行不重复」(性质④),也破坏实体完整性。应设主码(如学号)。
- 表 C:两列都叫
name。 → 错:违反「列名不同」(性质②)。
九、常见易混点
| 现象(易错) | 正确说法 |
|---|---|
| 以为一个数据库有多个「模式」 | 模式全局唯一;可以有多个的是「外模式」 |
| 分不清外模式/内模式 | 外模式=用户看到的局部逻辑(上层);内模式=物理存储(底层) |
| 把「逻辑独立性」和「物理独立性」搞反 | 改全局逻辑不影响程序→逻辑独立;改物理存储不影响程序→物理独立 |
| 认为外码也是本表的主码 | 外码是「引用别表主码」的属性,本身不一定是主码 |
| 觉得 Excel 表天然就是关系 | Excel 单元格能塞多个值、能重名、能重复行,不一定满足 1NF 五条性质 |
十、小测验(不翻书试试)
- 画出三级模式(外模式/模式/内模式),并说明两级映像如何实现逻辑独立性与物理独立性。
- 关系模型中「关系、元组、属性、主码、外码、域」分别指什么?结合 student 表举例。
- 关系(二维表)区别于普通表格,至少列出 4 条基本性质。
参考教材:《数据库技术基础(MySQL版)》王立力 / 上海交通大学出版社(模块 1)。文中
![...]为配图占位,发布时换成手绘或课件截图即可。
【声明】本文由 AI 辅助生成,仅供 MySQL 数据库教学参考,如有疑误以教材为准。
浙公网安备 33010602011771号