BodySense 数据库工程深化课程 MOC
以 BodySense 真实 PostgreSQL/GORM/Repository/JobRuntime 为实验载体的 20 课数据库工程深化课程;映射 Full Stack Open Part 13 与 TECH SCHOOL backend 节点,并用 PostgreSQL 官方语义和 CMU 数据库系统内容补齐底层心智模型。
[!info] related notes
- 上层知识地图:数据库 MOC、BodySense 项目 MOC
- 已有路线:关系型数据库学习路线
- BodySense 数据:BodySense 数据库设计
- Go 数据访问:Go 数据访问 MOC
- 事务总览:数据库事务、并发与恢复总览
- 相邻专项:BodySense Redis 从零到一课程 MOC
BodySense 数据库工程深化课程 MOC
课程定位
[!important] 完整教学稿标准 这套课程现在按照与 Redis 课程相同的标准维护:任何重要概念第一次出现,都要先解释是什么、为什么出现、最小工作模型、例子、机制与失败边界,再进入 BodySense 代码。 related notes 是复习/延伸入口,不负责替课程补缺失的前置知识。
因此课程允许为了教学连续性重复稳定定义;不能为了“知识库去重”压缩成只有结论的提纲。Prediction 默认放在完整讲解之后,Answer 必须解释因果。
这不是第二套独立的数据库大纲,而是 BodySense Master Course 的数据库深化教学层。它把 Full Stack Open Part 13 的关系数据库应用层、TECH SCHOOL 的 Go/PostgreSQL 工程主线、PostgreSQL 官方文档的产品语义,以及 CMU 15-445/645 的数据库系统底层心智模型重新编排成一条可以直接在 BodySense 上验证的学习路径。
为什么这样设计
| 来源 | 本课程吸收什么 | 不机械照搬什么 |
|---|---|---|
| Full Stack Open Part 13 | 关系数据库、ORM、migration、关联、transaction 的应用开发视角 | 不为了课程把 BodySense 改成 Sequelize/Node |
| TECH SCHOOL Backend Master Class | Go + PostgreSQL 的 schema、migration、transaction、lock、deadlock、isolation、DB error、test | 不把 sqlc/Asynq 等工具强行替换现有 GORM/JobRuntime |
| PostgreSQL 官方文档 | PostgreSQL 18 的事务、锁、索引、EXPLAIN、VACUUM、恢复等产品事实 | 不靠教程口诀代替产品语义 |
| CMU 15-445/645 | Page/Buffer、Index、Query Execution/Optimization、Concurrency、Logging/Recovery 的底层模型 | 不要求为了后端求职去实现完整 DBMS |
[!important] 课程目标 重点不是“会写 SQL”,而是能回答:
这个 Schema 为什么能阻止非法状态? 这条 SQL 实际会怎么执行? 这个 Index 为什么有用或没用? 两个并发事务为什么会冲突? 这段 Go 代码的 transaction boundary 在哪里? 数据库 crash 后为什么能恢复? 慢查询、锁等待、bloat、连接耗尽如何定位?
与 BodySense Master Course 的关系
这套 20 课会尽量复用现有 canonical exercise:
FSO Part 13
├─ database layer structure
├─ foreign key / join
├─ relational querying / projections
├─ migration-model separation
├─ transactional owned insert
├─ direct DB inspection
└─ eager vs lazy load
TECH SCHOOL
├─ #1 schema
├─ #3 migration
├─ #5 DB test
├─ #6 transaction
├─ #7/#8 lock + deadlock
├─ #9 isolation
├─ #15 constraints
├─ #16 DB error
└─ #54 durable job
课程笔记是教学界面;BodySense Master Course ledger 仍然是正式 mastery / placement 的 source of truth。
课程总览
filters:
and:
- 'file.ext == "md"'
- 'file.inFolder("z")'
- 'file.path.startsWith("z/bodysense-database-course-")'
- 'file.path != this.file.path'
formulas:
knowledge: 'file.asLink(title)'
properties:
formula.knowledge:
displayName: 课程
note.lesson:
displayName: Lesson
note.lesson_status:
displayName: Status
note.description:
displayName: Description
views:
- type: table
name: 数据库深化课程
order:
- note.lesson
- formula.knowledge
- note.lesson_status
- note.description
columnSize:
note.lesson: 56
formula.knowledge: 360
note.lesson_status: 110
note.description: 680
20 课结构
Phase A · 关系模型与应用数据访问
| # | 主题 |
|---|---|
| 1 | [[bodysense-database-course-01-data-ownership |
| 2 | [[bodysense-database-course-02-schema-constraints-normalization |
| 3 | [[bodysense-database-course-03-sql-relational-querying |
| 4 | [[bodysense-database-course-04-go-data-access-boundary |
| 5 | [[bodysense-database-course-05-schema-migration |
Phase B · 存储、索引与查询性能
| # | 主题 |
|---|---|
| 6 | [[bodysense-database-course-06-storage-pages-buffer-pool |
| 7 | [[bodysense-database-course-07-postgresql-indexes |
| 8 | [[bodysense-database-course-08-query-planner-explain |
| 9 | [[bodysense-database-course-09-orm-query-shape |
| 10 | [[bodysense-database-course-10-connection-pool-capacity |
Phase C · Transaction 与并发正确性
| # | 主题 |
|---|---|
| 11 | [[bodysense-database-course-11-transaction-boundary-acid |
| 12 | [[bodysense-database-course-12-isolation-anomalies |
| 13 | [[bodysense-database-course-13-postgresql-mvcc |
| 14 | [[bodysense-database-course-14-locks-deadlocks |
| 15 | [[bodysense-database-course-15-concurrency-control-patterns |
Phase D · Durability、运维与生产治理
| # | 主题 |
|---|---|
| 16 | [[bodysense-database-course-16-wal-recovery |
| 17 | [[bodysense-database-course-17-vacuum-autovacuum |
| 18 | [[bodysense-database-course-18-backup-pitr-replication |
| 19 | [[bodysense-database-course-19-security-privacy-lifecycle |
| 20 | [[bodysense-database-course-20-capstone |
建议学习方式
每一课统一:
概念与系统模型
→ BodySense 真实代码/Schema 锚点
→ Prediction(先回答)
→ 折叠 Answer / 解析
→ SQL / Go Lab
→ Failure Injection
→ Explain-back / L4 Gate
[!tip] Prediction 的答案默认折叠。先写自己的判断和理由,再展开答案。已有知识笔记负责长期复习;课程笔记允许为了教学连续性重复必要结论。
BodySense 主要代码锚点
apps/api/internal/database/database.go
apps/api/internal/database/transaction.go
apps/api/internal/database/migrate.go
apps/api/migrations/000001_vnext_baseline.up.sql
apps/api/internal/repository/*
apps/api/internal/model/*
重点案例:
BodyState revision / SELECT ... FOR UPDATE
JobRuntime claim / lease
RuntimeEvent durable log
Treatment immutable revision
KnowledgeLibrary / pgvector
Privacy erasure
课程结束后的能力目标
- 从业务 invariant 设计 PK/FK/UNIQUE/CHECK 与关系;
- 不依赖 ORM 猜测,能写和读真实 SQL;
- 用
EXPLAIN (ANALYZE, BUFFERS)解释查询成本; - 从访问模式设计索引,而不是“字段常查就加索引”;
- 复现并解释 lost update、lock wait、deadlock、serialization failure;
- 在 Go 中设计清晰 transaction boundary;
- 解释 PostgreSQL MVCC、WAL、VACUUM 为什么彼此相关;
- 定位 connection pool、slow query、lock、bloat 等生产问题;
- 设计 migration / backup / restore / privacy erasure 的工程边界;
- 对 BodySense 一条完整数据链做数据库架构审计。
外部参考
- Full Stack Open Part 13:Relational databases
- TECH SCHOOL
simplebank:Working with database [Postgres] 与后续可靠性课程 - PostgreSQL 18 Documentation:Indexes / Concurrency Control / EXPLAIN / Routine Vacuuming / Backup & Recovery
- CMU 15-445/645:Indexes、Query Execution / Optimization、Concurrency Control、Logging / Recovery