- 关系模型(关系数据模型)的“键(Keys)与完整性约束(Integrity Constraints)”
- 主键/外键:对应实体完整性、参照完整性,偏“约束/实现/建表规则”。
- 候选键/超键/备用键:偏“如何唯一标识元组(行)”,是理论基础。
- 函数依赖(Functional Dependency, FD)与规范化(范式 / Normalization)
- 候选键、主属性等,是做范式判断时的“工具变量”。
超键 候选键 主键 外键
一张“包含关系”速记
- 候选键 ⊂ 超键
- 主键 = 选定的候选键
- 外键 = 引用别表键的属性(可重复,可为空取决于约束)
E-R 图常见符号含义(以 Chen 记法为主)
- 方形(矩形):实体(Entity)
例:学生、课程、订单 - 菱形:联系/关系(Relationship)
例:学生— 选课 —课程 - 圆形(小圆圈/椭圆):属性(Attribute)
例:实体学生的属性:学号、姓名
数字表示什么(基数/多重度)
连在线条旁边的 1、N、M(或 0..1、1..、0..)表示基数(Cardinality)/多重度,说明“一个实体最多/最少能对应另一边多少个”。
常见写法:
- 1:1:一对一
- 1:N:一对多
- M:N:多对多
- 扩展写法:
- 0..1:可选,最多 1 个
- 1..*:至少 1 个,很多个
- 0..*:可选,很多个
关系模式到ER图 和ER图到关系模式
各范式分别怎么用到“键”(对应关系)
1NF:几乎不靠“键”
- 关注点:属性值是否原子(不可再分、无重复组)。
- 与键关系:弱,主要是数据表示问题。
2NF:强依赖“候选键是否为联合键”
- 定义要点:在 1NF 基础上,每个非主属性对每个候选键都“完全函数依赖”。
- 关键:出现违反 2NF 的条件通常是:
- 存在联合候选键
AB - 有非主属性
C只依赖A或B(部分依赖)
- 存在联合候选键
所以:2NF = 处理“联合键的一部分决定了非主属性”。
3NF:用到“超键 + 主属性/非主属性”
常用判定式(考试最常用):
对任意函数依赖
X → Y,若X不是超键,则Y必须是主属性(否则不满足 3NF)。
也可以理解为:消除传递依赖(非主属性依赖非主属性),但严格判题用上面的“超键/主属性”版本更稳。
BCNF:直接用到“超键/候选键”
判定式:
对任意非平凡函数依赖
X → Y,X必须是超键。
也就是:只认“决定因素必须够资格当键”,比 3NF 更严格。
外键和范式:是什么关系?
- 范式主要解决“表内属性依赖导致的冗余/异常”。
- 外键主要解决“表间引用一致性”(参照完整性)。
- 规范化分解后,常常会产生多张表,这时用外键把它们连接回去(实现层面保证一致性)。
所以关系是:范式决定“拆不拆、怎么拆”;外键决定“拆完怎么关联、怎么保证一致”。
做范式题的标准流程(你可以照这个记)
- 写出(或从题目给的)函数依赖
- 求 候选键 → 推出 主属性集合
- 判 2NF(看部分依赖)→ 判 3NF(看 X 是否超键或 Y 是否主属性)→ 判 BCNF(看 X 是否超键)
数据库三级模式体系结构(外模式/模式/内模式)有利于什么?
核心:实现数据抽象与数据独立性,把用户视图、逻辑结构、物理存储分离,降低变更影响。
1)有利于实现数据独立性(最常考)
- 物理数据独立性:修改内模式(存储结构、索引、文件组织、分区等)时,不影响模式/外模式,应用通常无需改。
- 逻辑数据独立性:修改模式(加字段、拆表、调整关系等)时,通过外模式/视图与映射,尽量不影响应用程序。
2)有利于多视图/多用户使用同一数据库
不同用户/部门可以有不同的外模式(视图),各取所需;同时共享同一逻辑模式与物理数据。
3)有利于安全性与权限控制
通过外模式(视图)可以隐藏敏感字段、限制可见范围,配合授权实现“最小权限”。
4)有利于维护与扩展
DBA 可在不影响用户的前提下优化存储与性能;也更容易演进数据库逻辑结构。
一句话背诵:三级模式=多级抽象 → 多视图 + 安全控制 +(逻辑/物理)数据独立性(最重要)。
理解 重建视图能够实现数据的逻辑独立性
层次/网状模型 中,数据之间联系用 指针 实现
用 树型结构表示实体类型以及实体间联系的数据模型称为 层次模型

外模式 模式 内模式
- 外模式(External Schema / 用户模式):面向用户/应用的视图级描述,可有多个。
- 模式(Conceptual Schema / 概念模式、逻辑模式):全局逻辑结构的统一描述,通常只有一个。
- 内模式(Internal Schema / 存储模式):数据在物理存储层的组织方式描述,通常只有一个。
数据的物理独立性是指当数据的?改变时 通过系统内部的自动映像或转换功能,保持了数据的?不变 从而使应用程序不用修改 内模式 模式
对现实世界进行第一层抽象的模型称为? 对现实世界进行第二层抽象的模型称为?
- 对现实世界进行第一层抽象的模型:概念模型(信息模型,常用 E-R 模型)
- 对现实世界进行第二层抽象的模型:逻辑模型(数据模型,如关系模型/层次模型/网状模型)
数据库类型按照数据模型来划分 关系型 层次 网状 面向对象数据库等等
下述哪几条体现了数据库系统的特点?【 】 a、 数据冗余度小 b、数据结构化 c、数据面向应用程序 d、数据共享性高 e、数据独立性高 A、a d e B、b c d C、a b d e D、以上全是
选 C(a b d e)。
- a 数据冗余度小:是数据库系统特点
- b 数据结构化:是数据库系统特点
- c 数据面向应用程序:不是(这是文件系统特点;数据库是“数据面向全局/共享”,与应用相对独立)
- d 数据共享性高:是数据库系统特点
- e 数据独立性高:是数据库系统特点
.数据库三级模式体系结构的划分,有利于保持数据库的( )
A、数据独立性 B、数据安全性
C、结构规范化 D、操作可行性
6.在下列条目中,哪些是数据库管理员(DBA)的职责?( )
Ⅰ. 负责管理企业组织的数据库资源
Ⅱ. 收集和确定有关用户的需求
Ⅲ. 设计和实现数据库并按需要修改和转换数据
Ⅳ. 为用户提供资料和培训方面的帮助
A、Ⅰ和Ⅱ B、Ⅰ,Ⅱ和Ⅲ C、Ⅲ和Ⅳ D、都是
7.在DBS中,DBMS和OS之间的关系是( )
A、并发运行 B、相互调用 C、OS调用DBMS D、DBMS调用OS
DBMS 作为应用/系统软件运行在操作系统之上,需要通过 OS 提供的服务完成文件/磁盘 I/O、内存管理、进程线程/并发与同步、网络通信等,因此是 DBMS 调用 OS。
8.数据库系统的数据独立性体现在( )。
A、不会因为数据的变化而影响到应用程序
B、不会因为数据存储结构与数据逻辑结构的变化而影响应用程序
C、不会因为存储策略的变化而影响存储结构
D、不会因为某些存储结构的变化而影响其他的存储结构
8.数据库系统的数据独立性体现在( )。
A、不会因为数据的变化而影响到应用程序
B、不会因为数据存储结构与数据逻辑结构的变化而影响应用程序
C、不会因为存储策略的变化而影响存储结构
D、不会因为某些存储结构的变化而影响其他的存储结构
- A 说“数据的变化不影响应用程序”不准确。应用程序本来就要处理数据内容变化(新增/修改记录),这不是“数据独立性”的含义。
- B 正确概括了数据独立性:物理独立性(存储结构变化不影响逻辑结构/应用) + 逻辑独立性(逻辑结构变化尽量不影响外模式/应用)。
- C 描述方向不对,独立性讨论的是“上层不受下层影响”,不是“策略变化不影响结构”。
- D 与数据独立性无关,更像存储内部结构之间的影响问题。
.在一个数据库系统的三级模式结构中,通常作为用户视图的模式级别是( )。
A、模式 B、外模式 C、内模式 D、关系模式
.学校中有若干系,每个系有若干班级和教研室,每个教研室有若干教师,
其中有的教授和副教授每个各带若干研究生,每个班有若干学生,每个学
生选修若干课程,每门课程可由若干学生选修。请用E-R图画出此学校的
概念模型。
对于每个关系 有且仅有一个主键 但是主键属性可以不只一个
一般来说单主键自动满足第二范式 2NF
当然 主键双属性也能满足第二NF甚至3NF
而看是不是满足3NF 就得看这个表里面除了主键的列 有没有传递依赖
比如我主键是uid 但是有列名pid pname 这显然乱套了
例题 3:属于 3NF,但不属于 BCNF
教师授课关系 R(TNO, TNAME, CNO, CNAME),其中 TNO 为教师号,TNAME 为教师姓名,CNO 为课程号,CNAME 为课程名,主键为 (TNO, CNO)。且已知 TNO → TNAME,CNO → CNAME。则关系 R 属于( )
选项: A. 3NF
B. BCNF
C. 2NF
D. 1NF
✅ 解析:
- 主键:(TNO, CNO)
- 非主属性:TNAME, CNAME
1. 1NF?✅ 是
2. 2NF?✅ 是(TNAME 依赖 TNO,CNAME 依赖 CNO —— 但它们都是主键的一部分 → 完全依赖)
3. 3NF?
函数依赖:
- TNO → TNAME
- CNO → CNAME
- (TNO, CNO) → TNAME, CNAME
→ 所有非主属性都直接依赖主键或主键的一部分 → 无传递依赖 → ✅ 满足 3NF
一、终极记忆口诀(4句搞定1~4NF)
🔹 1NF 看原子 —— 列不能分
🔹 2NF 防部分 —— 主键要全靠
🔹 3NF 避传递 —— 非主别连非主
🔹 BCNF 更严格 —— 左边必须是超键
🔹 4NF 消多值 —— 一个属性别管太多事
✅ 口诀解释:
| 范式 | 口诀 | 记忆点 |
|---|---|---|
| 1NF | “看原子 —— 列不能分” | 所有列都是“最小单位”,比如“姓名”不能拆成“姓+名”(除非你真要拆) |
| 2NF | “防部分 —— 主键要全靠” | 如果主键是复合的,非主属性必须依赖整个主键,不能只依赖一部分 |
| 3NF | “避传递 —— 非主别连非主” | A → B → C,如果A是主键,B和C是非主属性 → C传递依赖于A → 违规! |
| BCNF | “更严格 —— 左边必须是超键” | 所有函数依赖 X→Y 中,X 必须是“超键”(能唯一标识元组) |
| 4NF | “消多值 —— 一个属性别管太多事” | 多值依赖:比如一个员工可以有多个项目、多个技能 → 要拆表! |
🧩 二、场景联想记忆法(用生活例子记住每个范式)
✅ 1NF:原子性 → “快递单不能写‘张三李四’”
- 例子:学生表里“姓名”字段不能存“张三,李四” → 必须拆成两行或两个字段
- 记忆:“一个格子只能放一个东西”
✅ 2NF:完全依赖 → “选课表不能只靠课程号定成绩”
- 例子:R(SNO, CNO, CNAME, GRADE),主键是(SNO,CNO)
→ CNAME 只依赖 CNO → 部分依赖 → 违反 2NF - 记忆:“主键是夫妻俩,非主属性必须同时爱两个人,不能只爱其中一个!”
✅ 3NF:无传递依赖 → “院长不能由学院号决定,而学院号由学生号决定”
- 例子:SNO → DNO → MAG → MAG 传递依赖于 SNO → 违反 3NF
- 记忆:“不要当传话筒!非主属性不能通过另一个非主属性间接依赖主键”
✅ BCNF:超键约束 → “老师名字只能由老师号决定,不能由课程号决定”
- 例子:R(TNO, TNAME, CNO, CNAME),TNO → TNAME,但 TNO 不是超键 → 违反 BCNF
- 记忆:“所有依赖的左边,必须是‘身份证号’级别的唯一标识”
✅ 4NF:多值依赖 → “一个员工不能既管项目又管技能,得分开”
- 例子:R(ENO, PNO, SKILL),ENO →→ PNO 且 ENO →→ SKILL → 违反 4NF
- 记忆:“一个人不能同时负责多件事,得拆成多个小表!”
SQL
SQL 语句体系
├── DQL: SELECT → 查询
│ ├── WHERE / LIKE / IN / BETWEEN / IS NULL
│ ├── ORDER BY / DISTINCT / GROUP BY / HAVING
│ ├── JOIN / 子查询 / UNION
│ └── LIMIT / CASE / 窗口函数
├── DML: INSERT / UPDATE / DELETE / TRUNCATE
├── DDL: CREATE / ALTER / DROP / INDEX / VIEW
├── DCL: GRANT / REVOKE / FLUSH PRIVILEGES
├── TCL: BEGIN / COMMIT / ROLLBACK / SET autocommit
└── 其他: DESCRIBE / SHOW / USE / VERSION / 变量 / 注释
事务 ACID
A 原子性:要么全做,要么全不做; atomicity
C 一致性:数据始终合法、符合规则; consistency
I 隔离性:并发操作互不干扰; isolation
D 持久性:提交后永不丢失。durability
✅【应试标准答法 · 数据库设计基本步骤】(得分点明确 · 便于记忆)
数据库设计分五步走,环环相扣、逐步求精:
- 需求分析阶段 —— 摸清业务要什么 → 输出:需求文档、数据字典、数据流图
- 概念设计阶段 —— 画E-R图建模型 → 输出:全局概念模型(实体-关系图)
- 逻辑设计阶段 —— 转关系模型 + 规范化 → 输出:满足BCNF/3NF的逻辑结构
- 物理设计阶段 —— 选存储+索引+路径 → 输出:物理结构、存取策略、性能预估
- 实施与维护阶段 —— 建库+装数+测试+运维 → 输出:可运行系统 + 持续优化机制
📌 记住口诀:“需概逻物实” —— 需求→概念→逻辑→物理→实施维护,缺一不可!




