Appearance
第1章:关系模型与数据库结构
数据与管理系统
数据库是被组织和持久保存的数据,DBMS 是接受查询、维护约束并管理存储与执行的系统。应用看到表和事务,内部则有目录元数据、页、索引、锁或版本、日志等对象。
| 层面 | 对象 | 保证或任务 |
|---|---|---|
| 逻辑模式 | 表、列、键、约束 | 描述数据含义与合法状态 |
| 查询处理 | 逻辑计划、物理算子 | 计算查询结果 |
| 存储管理 | 页、记录、缓冲池、索引 | 定位与搬运数据 |
| 事务管理 | 锁、版本、提交状态 | 协调并发与原子性 |
| 恢复管理 | 日志、检查点 | 故障后恢复已承诺的状态 |
一条 SQL 查询通常先解析和绑定,转换为逻辑计划,再选择物理算子,执行时通过缓冲池访问页。事务管理和恢复贯穿这些操作,不是查询最后才添加的两个步骤。
关系与键
关系由属性集合与元组集合构成。候选键能唯一识别元组,且不含多余属性;主键是选择出来的一个候选键。外键约束某些取值对应被引用表的合法键值。
设 Student(sid,name)、Course(cid,title)、Enroll(sid,cid,score)。选课表的候选键可以是 (sid,cid),而不是学生姓名。姓名可能重复,也可能改变,不宜仅因显示方便就承担身份。
数据独立性
增加索引通常不改变表的逻辑内容,也不应改变正确查询的结果。这是物理组织与逻辑接口分离的价值。不同执行计划可以计算相同关系表达式。
这种独立性仍有限制:若查询没有 ORDER BY,不能依赖偶然的物理返回顺序。换索引后顺序变化不是数据库破坏了已承诺的排序,因为原查询没有要求排序。
集合与 SQL 多重集
经典关系代数采用集合,SQL 查询默认常保留重复行。SELECT name FROM Student 与 SELECT DISTINCT name ... 语义不同。后续代数改写必须尊重重复、NULL、排序和聚合规则。
NULL 表示缺失或未知等特殊情况,比较通常产生 UNKNOWN,而非普通真或假。WHERE 仅保留条件为 TRUE 的行,这会影响过滤和连接。
练习
- 为选课系统列出主键、外键和不能仅靠这些键表达的一项业务约束。
- 增加索引后返回行顺序变了,何时属于正确行为?
- 为什么 SQL 中投影一列后可能仍有重复值?