1. 系统设计基础:DFD 与 DD
“DFD 是管道总图,DD 是管道里的材料清单。画图的铁律是:所有数据都必须经过‘加工’。”
一、 数据流图 (DFD) 四大元素与铁律
- 外部实体 🧑💼: 系统外的人或机构(正方形)。
- 加工 ⚙️: 处理数据的动作(圆形/圆角矩形)。
- 数据存储 🗄️: 存放数据的地方(右开口矩形)。
- 数据流 ➡️: 搬运数据的管道(箭头线)。
🚫 DFD 连线铁律: 只有“加工”可以主动处理数据!
外部实体 ↔ 数据存储(错!)
外部实体 ↔ 外部实体(错!)
数据存储 ↔ 数据存储(错!)
- 两大经典错误: 【黑洞】(只有输入无输出);【奇迹】(只有输出无输入)。
- 父子图平衡: 顶层图(父)与0层图(子)的输入/输出数据流在数量和名称上必须 100% 匹配。
二、 数据字典 (DD) 密码本
= : 被定义为
+ : 和(连接两个必填项)
[...] : 任选其一(多选一,如 [男 | 女])
(...) : 可选(可有可无)
{...} : 重复(出现 0 次或 N 次)
2. 数据库安全性:权限控制
“不要让实习生拥有删库跑路的权限。”
- GRANT:授予权限。
GRANT SELECT, UPDATE ON 员工表 TO 小明;
- REVOKE:收回权限。
REVOKE UPDATE ON 员工表 FROM 小明;
- WITH GRANT OPTION:权限传递。如果 DBA 收回了上级的权限,下级通过该选项获得的权限会被级联收回 (Cascade)。
3. 事务控制、并发与恢复 (核心必考)
“一笔转账,要么全做要么全不做;一旦提示成功,断电也不能丢钱。”
一、 ACID 四大神兽
- A (原子性 Atomicity):同生共死,不可分割(由日志的 undo 保证)。
- C (一致性 Consistency):操作前后,总量守恒、符合业务规则。
- I (隔离性 Isolation):多用户并发时互不干扰,仿佛单机运行。
- D (持久性 Durability):一旦提交(Commit),永久保存,断电不丢失(由日志的 redo 保证)。
二、 并发三大幽灵 (隔离性遭破坏)
- 脏读 (Dirty Read):读到了别人“还没提交、随时会撤销”的临时数据。
- 丢失更新 (Lost Update):两人同时修改,后提交的人把前一个人的修改覆盖了。
- 不可重复读 (Non-repeatable Read):同一次事务里看两次,数据竟然变了(被别人提交改了)。
三、 封锁协议 (Locking)
| 锁类型 |
遇到 X 锁请求 |
遇到 S 锁请求 |
| X 锁 (排他/写锁) |
冲突 (阻塞) 🚫 |
冲突 (阻塞) 🚫 |
| S 锁 (共享/读锁) |
冲突 (阻塞) 🚫 |
兼容 (一起读) ✅ |
注意:两个事务互相等待对方释放锁,导致永久卡死,称为死锁 (Deadlock) 💀。
四、 日志文件与系统恢复
先写日志原则 (WAL): 修改数据库物理文件前,必须先在日记本(日志文件)里记录动作!
考场直觉判断
场景:系统崩溃后重启,DBA 检查日志文件:
事务 T1:有 BEGIN,且有 COMMIT。
事务 T2:有 BEGIN,但没有 COMMIT。
对 T1 使用 REDO(重做): 因为它已经提交,要确保持久性 (D),落袋为安。
对 T2 使用 UNDO(撤销): 因为它没做完就断电了,要确保原子性 (A),擦除痕迹,当作没发生过。