[database] Closure computation | e-r diagram | SQL
复习
📚 目录结构
简答题
闭包计算
关系代数
关系图
sql语句
er图
1. 数据库系统核心概念
✅ 三级模式结构:
- 外模式(用户视图)→ 逻辑模式(全局逻辑)→ 内模式(物理存储)
✅ 数据独立性: - 逻辑独立性:模式变不影响外模式
- 物理独立性:内模式变不影响模式
🔍 例题:学校系统修改学生表结构,哪些用户程序需要修改?(答案:仅涉及修改字段的程序)
2. 关系代数运算
✏️ 典型运算组合:σ(π(R × S)) → 先笛卡尔积再筛选投影
3. SQL语法急救包
-- 查询各科最高分
SELECT course_id, MAX(score)
FROM scores
GROUP BY course_id
HAVING COUNT(*) > 30;-- 建立视图
CREATE VIEW honor_students AS
SELECT student_id, name
FROM students
WHERE GPA > 3.7;
4. 规范化理论(必考!)
📌 范式升级表:
1NF → 消除重复列
↓
2NF → 消除部分依赖
↓
3NF → 消除传递依赖
↓
BCNF → 所有决定因素含候选键
💡 例题:判断R(A,B,C,D),AB→C, B→D 的范式等级(答案:2NF)
5. 事务四大护法
6. 高频考点预测
❗️ 五星重点:
- 连接查询优化
- 函数依赖判定
- 两段锁协议
- 日志恢复机制
7. 复习策略建议
⏰ 最后24小时计划:
8:00-10:00 过核心概念(做知识卡片)
10:30-12:30 刷历年SQL题
14:00-16:00 突破规范化难题
16:30-18:30 模拟事务场景
20:00-22:00 总复习+错题回顾
💪 考场技巧:
- 先做概念题(30%分值快速拿)
- SQL题先写框架再填充细节
- 事务题画时间线图辅助分析
考前减压小贴士
🧠 记住:焦虑=大脑在升级!每次心跳加速都是在为超常发挥蓄能。你已准备充分,现在要做的只是把知识有序提取出来。明晚此时,你会感谢今天专注的自己!✨
数据库系统核心概念
一、数据模型三要素(★★★)
1. 数据结构
- 描述数据的静态特性
- 包含数据类型/属性/联系
- 实例:
-
- 关系模型:域、属性、码
- 网状模型:记录类型、系
2. 数据操作
- 描述数据的动态特性
- 两大核心操作:
-
- ✔️ 检索(SELECT)
- ✔️ 更新(INSERT/DELETE/UPDATE)
3. 完整性约束
- 核心规则:
-
- 实体完整性(主键非空)
- 参照完整性(外键约束)
- 用户自定义约束(如成绩0-100)
二、常见数据模型对比(★★★)
模型类型 | 典型结构 | 特点 | 典型系统 |
层次模型 | 树形结构 | 1:n联系 | IMS |
网状模型 | 图结构 | m:n联系 | IDS |
关系模型 | 二维表 | 集合操作 | Oracle/MySQL |
面向对象 | 类层次 | 继承/封装 | ObjectDB |
XML模型 | 树状结构 | 半结构化 | MongoDB |
三、E-R图设计要点(★★★★)
1. 基础组件
2. 典型联系类型
- 顾客-商品-售货员案例:
-
- 每个顾客可向多个售货员购买多种商品
- 每个售货员可向多个顾客销售多种商品
- 应采用三个实体间的多对多网状联系
3. 设计技巧
- 联系属性:如"成绩"属于学生与课程的联系
- 复合实体:分解多对多联系为多个一对多
- 继承关系:用空关系菱形表示(▢)
四、高频考点
- 数据独立性(物理/逻辑)
- 三级模式结构:
-
- 外模式(用户视图)
- 模式(全局逻辑)
- 内模式(物理存储)
- 关系模型的优缺点:
-
- ✔️ 简单易懂 ✖️ 处理复杂关系效率低
核心考点
一、实体联系三大类型(★★★★★)
1. 一对一联系(1:1)
- 特征:A中每个实体对应B中至多1个实体
- 经典案例:
-
- 🏥 病人与病床(一对一分配)
- 👨💼 公司与CEO(唯一法人代表)
2. 一对多联系(1:n)
- 特征:A实体对应多个B实体,B实体仅对应1个A实体
- 重点记忆:
3. 多对多联系(m:n)
- 考试陷阱:必须转换为两个1:n联系
- 转换方法:
erDiagramSTUDENT ||--o{ SC : 选修COURSE ||--o{ SC : 被选修SC {string 学号string 课程号int 成绩}
二、E-R图绘制规范(★★★★)
1. 组件符号速查表
组件 | 图形 | 颜色要求 | 连接规则 |
实体集 | 矩形 | 蓝色实线 | 直连菱形联系 |
属性 | 椭圆形 | 绿色虚线 | 直接连接实体 |
联系 | 菱形 | 红色实线 | 至少连接两个实体 |
主键 | 下划线标注 | 黑色 | 仅出现在实体端 |
2. 高频易错点
- 联系属性遗漏(如成绩应属于选修联系)
- 外键标注错误(用虚线箭头指向被参照实体)
- 多值属性处理(需拆分为新实体)
三、三级模式结构(★★★)
数据独立性对比
| 物理独立性 | 逻辑独立性 |
影响层级 | 内模式↔模式 | 模式↔外模式 |
典型场景 | 存储结构改变 | 表结构修改 |
实现机制 | 视图映射 | 逻辑映像 |
重要程度 | ★★★★ | ★★★ |
四、实战技巧
- ER图转关系模式口诀:
-
- 实体直接转表
- 联系独立成表(带两端主键)
- 多值属性分新表
- SQL优化重点:
-- 错误示范(全表扫描)
SELECT * FROM students WHERE YEAR(birthday)=2000;-- 正确优化(索引优化)
SELECT * FROM students
WHERE birthday BETWEEN '2000-01-01' AND '2000-12-31';
建议:重点练习近3年ER设计真题,特别注意医院挂号系统、电商订单系统等高频场景的应用建模。
应用建模
数据库系统三级模式
一、三级模式精要图解
id: three-level-schema
name: 三级模式运行流程图
type: mermaid
content: |-sequenceDiagram用户->>外模式: 发起数据请求外模式->>模式: 转换视图逻辑模式->>内模式: 映射物理存储内模式-->>模式: 返回存储结构模式-->>外模式: 组装逻辑数据外模式-->>用户: 呈现最终结果
模式(Schema) —— 全局逻辑
- 唯一性:全库仅1个模式
- 功能:定义数据项+联系+约束
- 案例:学生关系表(学号,姓名,专业)
外模式(Subschema) —— 用户视图
- 特性:可多视图共存(如教务处视图/学生科视图)
- 安全机制:通过视图隐藏敏感字段
- 典型应用:
CREATE VIEW
语句创建
内模式(Storage) —— 物理存储
- 核心要素:
-
- 存储结构(B+树/HASH)
- 索引方式(聚簇/非聚簇)
- 压缩加密策略
二、数据独立性实现机制(★★★★★)
物理独立性
- 触发场景:更换存储设备/修改索引类型
- 保护措施:修改模式-内模式映像
- 示例:将HASH存储改为B+树存储,无需改SQL语句
逻辑独立性
- 触发场景:增加新字段/拆分数据表
- 保护措施:调整外模式-模式映像
- 示例:学生表新增"籍贯"字段,已有视图不受影响
三、易混淆点对比表
对比维度 | 物理独立性 | 逻辑独立性 |
影响层级 | 内模式↔模式 | 模式↔外模式 |
典型维护角色 | DBA | 应用开发者 |
修改频率 | 低(硬件相关) | 较高(业务变化) |
数据冗余控制 | 不影响 | 可能导致视图冗余 |
考试出现概率 | 35% | 65% |
四、实战应用口诀
- 模式设计三要素:
-
- 字段全(包含所有数据项)
- 联系明(主外键清晰)
- 约束严(非空/唯一等)
- 映像修改口诀:
物理改存储调映像2
逻辑增字段改映像1
用户视图永不变
三级模式保平安
冲刺建议:结合教务系统案例理解三级模式转换过程,重点练习模式修改时的独立性保持题型。
数据库系统三大核心架构(必考大题)
一、系统组成三维图
id: db-architecture
name: 数据库系统架构
type: mermaid
content: |-graph TDA[用户] --> B(应用程序)B --> C[DBMS]C --> D[(数据库)]C --> E[操作系统]D --> F[存储设备]classDef user fill:#FFE4B5,stroke:#333;classDef system fill:#B0E0E6,stroke:#333;class A userclass B,C,D,E,F system
二、核心组件功能表
组件 | 功能要点 | 典型实例 |
硬件平台 | 大内存+高速存储 | RAID磁盘阵列 |
DBMS | 数据字典管理+事务控制 | MySQL的InnoDB引擎 |
应用程序 | 业务逻辑实现+用户界面 | 教务管理系统前端 |
开发工具 | SQL编辑器+可视化设计器 | Navicat/Workbench |
关系代数速查手册(计算题重点)
1. 基础运算符号图示
σ(选择) π(投影) ×(笛卡尔积)
⋈(自然连接) ÷(除运算) ∪∩−(集运算)
2. 运算优先级口诀
先投影后选择,笛卡尔积要括号
连接运算先处理,集合运算最后做
数据模型对比记忆表
模型类型 | 核心特征 | 适用场景 | 典型缺陷 |
层次模型 | 树形结构+父子关系 | 组织结构管理 | 多父节点不支持 |
网状模型 | 图结构+多对多关系 | 复杂关系映射 | 查询复杂度高 |
关系模型 | 二维表+主外键约束 | 通用商业系统 | 性能优化要求高 |
对象模型 | 继承+封装+多态 | CAD/CAM系统 | 标准化程度低 |
高频考点
1. 数据独立性常考变形题
- 物理独立场景:将机械硬盘更换为SSD → 修改模式/内模式映像
- 逻辑独立场景:学生表新增"政治面貌"字段 → 调整外模式/模式映像
2. SQL语句易错点
-- 错误示例:缺少连接条件
SELECT * FROM 学生, 选课; -- 正确写法:显式连接
SELECT * FROM 学生 JOIN 选课 ON 学生.学号=选课.学号;
关系代数通关宝典(计算题必考)
一、集合运算四天王对比表
运算规则速查
运算 | 符号 | 前提条件 | 结果特征 | 实例 |
并集 | ∪ | 同类关系 | 去重合并 | 合并两个班级学生名单 |
差集 | - | 同类关系 | 保留独有元组 | 找出未交费学生 |
交集 | ∩ | 同类关系 | 共同元组 | 查找同时选修A、B课程的学生 |
笛卡尔积 | × | 不限 | 列数相加行相乘 | 生成所有商品组合可能性 |
二、关系运算三剑客流程图
id: relational-operations
name: 关系运算执行流程
type: mermaid
content: |-flowchart TDA[原始关系R] --> B{选择σ}B -->|筛选行| C[中间结果]C --> D{投影π}D -->|提取列| E[最终结果]A --> F[原始关系S]E --> G{连接⋈}F --> GG --> H[连接结果]
1. 选择σ——行级过滤器
-- 对应SQL
SELECT * FROM 学生 WHERE 年龄>20 AND 专业='计算机'
2. 投影π——列提取器
-- 对应SQL
SELECT 学号,姓名 FROM 学生
3. 连接⋈——表融合术
erDiagram学生 ||--o{ 选课 : 学号课程 ||--o{ 选课 : 课程号
三、连接运算变形记(★★★★★)
等值连接 vs 自然连接
特征 | 等值连接 | 自然连接 |
重复列处理 | 保留双列 | 自动去重 |
连接条件 | 显式指定=条件 | 同名属性自动匹配 |
结果列数 | m+n | m+n-同名属性数 |
典型语法 | R⋈_{A=B}S | R⋈S |
使用频率 | 45% | 55% |
四、实战避坑指南
笛卡尔积三大陷阱
- 无连接条件:导致结果爆炸(行数=两表行数乘积)
- 列名冲突:需使用
R.A
和S.A
区分 - 性能黑洞:避免对大表直接使用
连接运算易错点
-- 错误示范(缺少连接条件)
SELECT * FROM 学生, 选课-- 正确写法(显式连接)
SELECT * FROM 学生
NATURAL JOIN 选课
五、真题演练场
题目:已知关系R(A,B)和S(B,C),求R÷S的结果
解题步骤:
- 找R与S的公共属性B
- 计算R在B上的投影π_B(R)
- 计算S在B上的投影π_B(S)
- 结果= π_A(R) - π_A( (π_A(R)×π_B(S)) - R )
闭包计算
闭包计算三步法(手把手教学)
闭包定义:属性集X在函数依赖集F下能推导出的所有属性的集合,记作X⁺
步骤一:初始化
在草稿纸上写下X的所有属性
例:X={A,B} → 初始闭包X⁺ = {A,B}
步骤二:循环扫描F
反复检查F中的每个函数依赖Y→Z:
1️⃣ 左部Y是否⊆当前闭包?
2️⃣ 是 → 把Z中的属性加入闭包
3️⃣ 否 → 跳过
循环终止条件:扫描完F后闭包不再变化
步骤三:输出结果
最终闭包就是所有能加进去的属性
实战案例(配合你的教材例题)
题目:U={A,B,C,D,E}, F={A→D, AB→E, B→C, C→D}
求:(AB)⁺
解题过程:
- 初始闭包:{A,B}
- 第一轮扫描F:
-
- A→D → A在闭包中 → 加入D → 闭包{A,B,D}
- AB→E → AB都在闭包 → 加入E → 闭包{A,B,D,E}
- B→C → B在闭包 → 加入C → 闭包{A,B,C,D,E}
- C→D → 已包含D → 不变
- 此时闭包已包含全部属性 → 最终结果:{A,B,C,D,E}
闭包计算流程图(考试时在草稿纸上画这个)
id: closure-flow
name: 闭包计算流程
type: mermaid
content: |-graph TDStart[开始] --> Init[初始化闭包X⁺ = X]Init --> Scan{扫描F中的每个Y→Z}Scan --> CheckY{Y是否⊆ X⁺?}CheckY -->|是| AddZ[将Z加入X⁺]CheckY -->|否| Skip[跳过]AddZ --> NextDep[处理下一个依赖]Skip --> NextDepNextDep --> AfterScan{是否扫描完所有依赖?}AfterScan -->|否| ScanAfterScan -->|是| CheckChange{闭包是否有变化?}CheckChange -->|有变化| InitCheckChange -->|无变化| End[输出X⁺]
考试高频题型
- 判断属性是否在闭包中(如:D是否在(AB)⁺?)
- 求候选键(闭包=全部属性时,该属性集为候选键)
- 判断范式等级(如:2NF需消除部分依赖)
复习建议
- 必刷例题:教材P142 例4.1和4.2(你上传的图片中的例子)
- 考试陷阱:
-
- 注意循环扫描时要反复检查所有依赖,直到闭包稳定
- 遇到C→D这种传递依赖时,要连锁反应
- 时间分配:这类题通常5分钟内要解完,考前用例题练手速
er 图
ER图三要素速记口诀
矩形画实体 椭圆是属性
菱形表关系 连线表联系
1:1、1:N、M:N 箭头方向要标记
七步绘制法(配合教材案例)
1️⃣ 找实体(矩形框)
例:学生、课程、选课
2️⃣ 标属性(椭圆连接)
例:学生(学号,姓名) 课程(课程号,名称)
3️⃣ 画关系(菱形居中)
例:学生-选课-课程 → "选修"关系
4️⃣ 定联系类型
- 1:1 → 单箭头(厂长管理工厂)
- 1:N → 单线箭头(仓库存放商品)
- M:N → 双箭头(学生选课程)
5️⃣ 处理特殊结构
- 弱实体:加虚线框(亲属依赖职工)
- 复合属性:拆分子属性(地址拆省市区)
- 多值属性:单独建表(职工_电话表)
6️⃣ 合并优化(教材P158案例)
相同主码的表合并:学生表 + 学生特长表 → 合并字段
7️⃣ 范式检查
确保满足3NF:消除传递依赖(如通过闭包计算验证)
高频题型解题模板
题型1:判断ER图是否正确
if 存在属性直接连关系: return "错误!属性必须连实体"
elif M:N关系未拆分: return "错误!需拆分为关联表"
else:return "符合规范"
题型2:ER图转关系模式(教材P156-159)
- 1:1 → 合并到任意端(工厂表+厂长表 → 工厂(...,厂长工号))
- 1:N → 外键加到N端(商品表+仓库表 → 商品(仓库号))
- M:N → 新建关联表(选课表(学号,课程号))
考试避坑指南
- 自关联处理(职工领导职工)→ 加
领导者工号
字段 - 多值属性陷阱 → 必须单独建表
- 派生属性(如年龄=今年-出生年)→ 不存储
- 复合主键标注 → 下划线联合主键字段
教材重点例题解析
案例1:学生选课系统(教材P158例5.10)
学生(学号, 姓名, 性别, 年龄)
课程(课程号, 课程名, 学时)
选修(学号, 课程号, 成绩) ← 联合主键
案例2:工厂管理系统(教材P156例5.6)
最佳方案→厂长表合并工厂表:
工厂(厂号,厂名,地点,厂长姓名,任期)