Skip to content

第1章:关系模型与数据库结构

数据与管理系统

数据库是被组织和持久保存的数据,DBMS 是接受查询、维护约束并管理存储与执行的系统。应用看到表和事务,内部则有目录元数据、页、索引、锁或版本、日志等对象。

层面对象保证或任务
逻辑模式表、列、键、约束描述数据含义与合法状态
查询处理逻辑计划、物理算子计算查询结果
存储管理页、记录、缓冲池、索引定位与搬运数据
事务管理锁、版本、提交状态协调并发与原子性
恢复管理日志、检查点故障后恢复已承诺的状态

一条 SQL 查询通常先解析和绑定,转换为逻辑计划,再选择物理算子,执行时通过缓冲池访问页。事务管理和恢复贯穿这些操作,不是查询最后才添加的两个步骤。

关系与键

关系由属性集合与元组集合构成。候选键能唯一识别元组,且不含多余属性;主键是选择出来的一个候选键。外键约束某些取值对应被引用表的合法键值。

Student(sid,name)Course(cid,title)Enroll(sid,cid,score)。选课表的候选键可以是 (sid,cid),而不是学生姓名。姓名可能重复,也可能改变,不宜仅因显示方便就承担身份。

数据独立性

增加索引通常不改变表的逻辑内容,也不应改变正确查询的结果。这是物理组织与逻辑接口分离的价值。不同执行计划可以计算相同关系表达式。

这种独立性仍有限制:若查询没有 ORDER BY,不能依赖偶然的物理返回顺序。换索引后顺序变化不是数据库破坏了已承诺的排序,因为原查询没有要求排序。

集合与 SQL 多重集

经典关系代数采用集合,SQL 查询默认常保留重复行。SELECT name FROM StudentSELECT DISTINCT name ... 语义不同。后续代数改写必须尊重重复、NULL、排序和聚合规则。

NULL 表示缺失或未知等特殊情况,比较通常产生 UNKNOWN,而非普通真或假。WHERE 仅保留条件为 TRUE 的行,这会影响过滤和连接。

练习

  1. 为选课系统列出主键、外键和不能仅靠这些键表达的一项业务约束。
  2. 增加索引后返回行顺序变了,何时属于正确行为?
  3. 为什么 SQL 中投影一列后可能仍有重复值?

上次更新: