2. 数据模型
数据模型决定了 DBMS 如何组织、约束与操作数据,是数据库系统的核心。本章依次介绍层次、网络、关系、ER、面向对象等模型,并回顾其他拓展模型。
2.1 层次数据模型
基本思想
- 现实世界中不少对象呈层级关系,层次模型使用树形结构表示记录之间的 1:N 关系。
- 记录由字段组成,父子关系(Parent-Child Relationship, PCR)构成模式的基本单元。
- 每个记录类型最多有一个父节点,所有 PCR 组合成层次数据模式。
层次模式与实例
- 模式由若干 PCR 描述,如“学生 → 选课 → 成绩”。
- 实例即在该模式下实际存储的记录树。
虚拟记录(Pointer Records)
现实数据并非天然层次化:
- 记录间存在 M:N、多父、N 元关系。
- 若直接复制数据会带来冗余。
为保持规范,引入 虚拟记录类型(指针),用于连接不同父节点或表达三元以上关系。例如:在“学生-课程” M:N 关系中创建中间虚拟节点来指向双方。
2.2 网络数据模型
核心概念
- 以**集合(Set)表达 1:N 关系,1 端称为所有者(Owner),N 端为成员(Member)。
- 一个记录类型可以同时作为多个集合的所有者或成员,形成网络结构,突破层次模型“唯一父节点”的限制。
- 数据项可为向量;若需表示自关联、M:N 或 N 元关系,可使用 LINK 记录类型。
示例
- 学生-课程的 M:N 关系通过额外集合连接。
- 员工的自引用(领导-下属)用 LINK 记录类型实现。
2.3 关系数据模型
关系模型使用数学集合论表示数据,提供最高的抽象层次,是现代主流模型。
属性、域与关系
- 属性(Attribute):实体的特征,如学生的姓名、学号。
- 域(Domain):属性值的取值范围,关系模型要求属性值原子化(1NF)。
- 关系(Relation):在各属性域上定义的 N 元集合,可写作:
- 实例由元组集合 组成。
键与外键
- 候选键:满足唯一性与最小性的属性集;若放宽最小性即超键。
- 主键:从候选键中选定,一表只能有一个主键,可由多个字段组成(全键)。
- 外键:一张表中的属性引用另一张表主键,形成逻辑指针;强制外键即可实现参照完整性。
完整性约束
- 域完整性:属性值必须属于定义域。
- 实体完整性:每个关系必须有主键,且主键值唯一且非空。
- 参照完整性:外键取值必须在被引用关系的主键中存在,否则拒绝或级联处理。
关系代数
一组操作型语言,强调“怎么做”:
- 基本操作:选择 、投影 、并 、差 、笛卡尔积 。
- 派生操作:交、连接(θ 连接、等值连接、自然连接)、除、外连接、外并等。
- 代数运算封闭,支持组合,实际系统会根据等价变换进行优化。
关系演算
逻辑型语言,强调“想要什么”:
- 域关系演算(DRC):变量取值于属性域,形式为 。
- 元组关系演算(TRC):变量绑定到元组,形式为 。
- 通过逻辑连接词(AND/OR/NOT)及量词(EXISTS/ALL)表达条件。
- 安全公式保证结果有限;关系代数与安全演算在表达能力上等价(关系完备性)。
2.4 ER 数据模型
实体-关系模型提供面向语义的概念设计方法。
- 实体(Entity):可区分的对象,通过属性刻画。
- 实体集(Entity Set):具有相同属性结构的实体集合,须有键;允许复合或多值属性。
- 关系(Relationship):实体之间的关联,可附加属性;关系集由大量同构关系组成。
- 基数与参与约束:标注关系的 1:1、1:N、M:N 等基数,限定实体参与关系的最小/最大次数。
- 高级特性:弱实体、ISA(特化/泛化)、聚合(将关系视作实体)、类别(混合实体集)。
ER 图以图形方式展示实体、关系及约束,是概念设计沟通的主要工具。
2.5 面向对象数据模型
为满足复杂数据与程序语言一致性的需求,面向对象模型支持:
- 解除 1NF 限制,允许集合/嵌套结构。
- 与面向对象分析、编程方法无缝衔接,支持对象永久化。
- 派生出对象-关系 DBMS 及原生对象数据库,提供类、继承、方法等概念。
2.6 其他典型数据模型
| 模型 | 目标 |
|---|---|
| 演绎 / 基于逻辑 | 支持递归推理与知识推断 |
| 时态 | 管理历史与时间维度信息 |
| 空间 / 时空 | 处理地理与位置数据 |
| XML / 半结构化 | 用于互联网数据交换、异构系统集成 |
| 多媒体、流数据等 | 面向特定领域扩展数据类型与操作 |
2.7 小结
- 数据模型定义了现实世界在数据库中的映射方式,是 DBMS 的灵魂。
- 层次与网络模型强调指针连接,适合早期 OLTP;关系模型借助集合论与 SQL 实现高度抽象;ER 模型用于概念设计;面向对象与其他模型满足新型需求。
- 未来是否会出现取代关系模型的主流数据模型,仍是开放问题,但理解各模型的思想与适用场景能帮助设计更健壮的数据库系统。