跳到正文

第1章学习笔记:数据库不是表格软件:先建立系统观

课程笔记

从数据、模式、查询、事务和持久化五层理解数据库为何是共享状态的管理系统。

关联:章节 第1章 数据库不是表格软件:先建立系统观

第1章笔记:数据库不是表格软件:先建立系统观

本章不是七个并列名词

从数据、模式、查询、事务和持久化五层理解数据库为何是共享状态的管理系统。 学习顺序从《从共享状态出发理解数据库》开始,到《用 SQLite 建立第一个可复现实验》闭合。每一节都要留下下一节能直接使用的对象:模式、关系、查询结果、页、计划、事务状态、日志记录或部署证据。若你只能逐条背定义,却说不清前一节输出怎样成为后一节输入,这一章还没有真正连起来。

七节依赖与例题

1. 从共享状态出发理解数据库

要解决的问题: 数据库负责让多个程序围绕同一份长期状态达成一致;表格只是表现形式,约束、并发和恢复才是系统责任。

跟着做: 网店库存从 1 件变成 0 件时,两个下单请求不能都读到 1 并同时成功;要把读取、扣减、订单写入视作一个受约束的状态迁移。

验收规则: 正确性 = 合法状态 + 合法迁移;任何一步失败都不能留下半个订单。

2. 数据、信息、模式与实例

要解决的问题: 模式描述允许出现什么结构,实例描述某一时刻实际存着什么;程序依赖模式而不是依赖某一批样例数据。

跟着做: 学生表的列名、类型、主键属于模式,周一导入的 126 名学生属于实例;清空数据不会让 student_id 失去主键身份。

验收规则: 实例 I 必须满足模式 S 的全部约束,写作 I ⊨ S。

3. 三级模式与数据独立性

要解决的问题: 外模式服务具体角色,概念模式表达全局逻辑,内模式决定物理组织;分层的价值是让变化被局部吸收。

跟着做: 给订单表增加 B+ 树索引不应迫使前端改接口;把手机号拆到受限视图也不应改变财务看到的月度汇总。

验收规则: 物理数据独立性隔离存储变化,逻辑数据独立性隔离概念模式变化。

4. 数据库系统的组件与一次查询

要解决的问题: 一次 SQL 会经过解析、绑定、重写、优化、执行、缓冲与存储,日志和锁管理器在旁保障失败与并发边界。

跟着做: SELECT 查询先确认列属于哪张表,再比较候选计划成本,执行器按计划从索引或页读取元组,缓冲池避免每次都访问磁盘。

验收规则: 总延迟近似为解析优化成本 + CPU 处理 + I/O 等待 + 锁等待 + 网络传输。

5. OLTP、OLAP 与工作负载

要解决的问题: 系统设计必须从读写比例、事务长度、访问局部性和延迟目标出发,不能只按数据量选择技术。

跟着做: 支付流水需要短事务和低尾延迟,年度经营分析需要扫描大量历史列;二者放进同一布局会互相伤害。

验收规则: 吞吐量 X、平均响应时间 R 与系统内平均并发数 N 满足 Little 定律 N = X·R。

6. 约束是可执行的业务知识

要解决的问题: 主键、外键、唯一、非空和检查约束把业务不变量交给数据库统一执行,比散落在多个客户端更可靠。

跟着做: 选课记录必须引用真实学生与课程,同一学生不能重复选同一教学班,学分必须在合法区间。

验收规则: 完整性约束应在最接近共享数据的位置声明,并用反例验证它真的拒绝非法状态。

7. 用 SQLite 建立第一个可复现实验

要解决的问题: 最小实验要包含建表、装载、查询、事务和断言;脚本从空库运行仍得到同一结果,才算可复现。

跟着做: 在内存 SQLite 中创建 account,插入两行余额,用事务转账 30 元并断言总额不变、任一余额不为负。

验收规则: 实验验收同时检查结果、约束、重复运行与失败回滚,不能只截一张成功界面。

章内共同推理方法

先写“一行或一个状态代表什么”,再写它必须满足的键、约束、顺序或故障假设。遇到 SQL,先定结果粒度和重复/NULL 语义,再编码;遇到存储与优化,先估算页数、基数和 I/O,再看真实执行计划;遇到事务与分布式,先画时间线和允许历史,再讨论隔离级别、日志或共识。任何公式都要带单位、数据分布和适用边界。

可复现练习

从本章七个例题中任选两个,用 SQLite 或课程给定模型从空环境重做。保存建表/输入、执行步骤、实际输出和断言;随后故意加入一个重复键、NULL、并发交错、崩溃点、倾斜分布或网络分区,记录第一个被破坏的不变量。只截成功界面、只贴 SQL 或只报告耗时不算完成。

闭卷验收

用十分钟画出本章七节箭头图;任选一条箭头解释传递的具体字段、状态或证据。再为《用 SQLite 建立第一个可复现实验》写一个最小失败案例,并追溯它需要《从共享状态出发理解数据库》中的哪条定义才能修复。最后列出三道题:一道唯一答案判断、一道多条件选择、一道必须计算或写 SQL/状态轨迹的问题,且每题都写清为什么其他答案错。