本页目录 · 5 节
第 6 章 数据库设计基础知识
对应大纲:科目 1-5 数据库设计基础知识|教材 P218–P247|优先级 ★★★★|综合知识估分 7~10 分
读法:本章分数集中在三张硬表——三级模式两级映像、范式判定、E-R 转关系;其余(接口、NoSQL)只背分类与适用场景。上午题必考范式与关系代数小计算,案例题常考 E-R 补全与反规范化。
一、知识框架
数据库设计基础知识
├─ 6.1 数据库基本概念
│ ├─ 技术发展:人工管理→文件系统→数据库系统→高级数据库
│ ├─ 数据模型三要素:数据结构|数据操作|完整性约束
│ ├─ DBMS 功能与数据库系统组成
│ └─ 三级模式(外/模式/内)+ 两级映像(逻辑/物理独立性)
├─ 6.2 关系数据库:基本术语|关系代数|完整性约束|函数依赖与范式
├─ 6.3 数据库设计:需求→概念→逻辑→物理→实施→运维
├─ 6.4 应用程序与数据库交互:库函数|嵌入 SQL|通用接口|ORM
└─ 6.5 NoSQL 数据库:四类对比|CAP/BASE|体系框架|分布式透明性
二、必背要点
2.1 数据库基本概念
技术发展四阶段
| 阶段 | 数据管理方式 | 特点 |
|---|---|---|
| 人工管理 | 程序内直接管理 | 无独立性、不共享、无专用软件 |
| 文件系统 | 文件 + 操作系统 | 有文件结构,但数据冗余大、独立性差 |
| 数据库系统 | DBMS 统一管理 | 数据结构化、共享性高、冗余低、独立性强 |
| 高级数据库 | 分布式、面向对象、NoSQL、云数据库 | 海量、异构、弹性 |
数据模型三要素:数据结构(静态骨架)、数据操作(动态行为)、完整性约束(合法状态)。
模型分层:概念模型(E-R,面向用户)→ 逻辑模型(层次/网状/关系/面向对象)→ 物理模型(存储细节)。
DBMS 六项功能:数据定义(DDL)、数据操纵(DML)、数据库运行管理、数据组织与存储、数据库建立与维护、通信接口。
数据库系统组成:数据库、DBMS、应用程序、数据库管理员(DBA)、用户。
三级模式与两级映像(必背)
| 模式 | 别名 | 描述对象 | 面向 |
|---|---|---|---|
| 外模式 | 子模式/用户视图 | 用户可见的局部数据视图 | 应用程序与用户 |
| 模式 | 概念模式/逻辑模式 | 全体数据的逻辑结构 | 全局设计 |
| 内模式 | 存储模式 | 物理存储结构、索引、存取方式 | 物理存储 |
| 映像 | 作用 | 保证 |
|---|---|---|
| 外模式/模式 | 模式变化时改映像,应用程序不变 | 逻辑独立性 |
| 模式/内模式 | 存储结构变化时改映像,逻辑结构不变 | 物理独立性 |
口诀:外—逻、内—物;外模式对应视图,内模式对应文件。
2.2 关系数据库
基本术语:关系(二维表)、元组(行)、属性(列)、域(取值范围)、候选码(能唯一标识元组的最小属性集)、主码(选定的候选码)、外码(引用其他关系主码的属性)、主属性(包含在任一候选码中的属性)。
关系代数五种基本运算
| 运算 | 符号 | 含义 | 结果 |
|---|---|---|---|
| 并 | R ∪ S | 合并,去重 | 同目同域 |
| 差 | R − S | 在 R 不在 S | 同目同域 |
| 笛卡尔积 | R × S | 全组合 | 度相加、元组数相乘 |
| 选择 | σ 条件(R) | 按行筛选 | 水平子集 |
| 投影 | π 属性(R) | 按列筛选 | 垂直子集,自动去重 |
导出运算:交 R∩S = R−(R−S);连接 R⋈S(θ 连接、等值连接、自然连接);除 R÷S(用于「对所有/全部」类查询)。
完整性约束:实体完整性(主码非空且唯一)、参照完整性(外码取值为空或等于被参照关系的主码值)、用户定义完整性(业务规则、CHECK、域约束)。
函数依赖:X→Y 表示 X 决定 Y。完全函数依赖(不可再拆)、部分函数依赖(依赖于组合码的一部分)、传递函数依赖(X→Y、Y→Z)。
Armstrong 公理:自反律、增广律、传递律(可推出合并、分解、伪传递规则)。
范式判定与分解(本章必考)
| 范式 | 判定条件 | 典型违反 | 分解要点 |
|---|---|---|---|
| 1NF | 每个属性都是原子值 | 一列存多个电话 | 拆行或拆独立表 |
| 2NF | 1NF 且非主属性完全依赖候选码 | 联合码 (学号,课程)→姓名 | 把部分依赖拆成新表 |
| 3NF | 2NF 且非主属性不传递依赖候选码 | 学号→系号→系主任 | 拆出传递依赖链 |
| BCNF | 每个决定因素都包含候选码 | 主属性依赖非候选码 | 继续投影,可能丢失函数依赖 |
判定捷径:候选码只有一个属性 → 必满足 2NF;全部属性都是主属性(全码)→ 必满足 3NF;3NF 允许主属性对码的传递依赖,BCNF 不允许。
分解质量:无损连接性(自然连接可还原原关系)与保持函数依赖。3NF 分解可同时做到两者;BCNF 分解只保证无损连接,不一定保持函数依赖。反规范化(适当冗余)用于换查询性能。
2.3 数据库设计六步
| 步骤 | 主要任务 | 关键产物 |
|---|---|---|
| 1 需求分析 | 收集数据与处理需求 | 数据字典、DFD、数据流/事务分析 |
| 2 概念结构设计 | 局部 E-R → 合并 → 全局 E-R | E-R 图(独立于 DBMS) |
| 3 逻辑结构设计 | E-R 转关系模式、规范化、优化 | 关系模式、外模式/视图 |
| 4 物理设计 | 存储结构、索引、分区、参数 | 表空间、索引方案 |
| 5 数据库实施 | 建库建表、装载数据、试运行 | DDL 脚本、初始数据 |
| 6 运行维护 | 备份恢复、监控调优、重组重构 | 运维记录、调优报告 |
概念设计的三类冲突:属性冲突(同一属性在不同部门单位/类型不同)、命名冲突(同名异义、异名同义)、结构冲突(同一对象在不同局部模型中抽象不同、实体与属性互换)。
E-R 图转关系模式三条规则(必背)
| 联系类型 | 转换方法 | 码的取法 |
|---|---|---|
| 1:1 | 并入任一端,或独立建模式 | 任一端的主码 |
| 1:N | 并入 N 端作外码,或独立建模式 | N 端的主码 |
| M:N | 必须独立建关系模式 | 两端主码的组合 |
补充:三元联系独立建模式;多值属性单独建表(否则违反 1NF)。
物理设计:索引(B+ 树宜范围、Hash 宜等值、位图宜低基数)、聚簇/分区/表空间、缓冲与并发参数。
2.4 应用程序与数据库的交互
| 方式 | 代表 | 优点 | 缺点 |
|---|---|---|---|
| 库函数级 | OCI、libpq、MySQL C API | 性能最高、控制细 | 与 DBMS 绑定,可移植差 |
| 嵌入 SQL | ESQL/C、Pro*C | 集合操作 + 宿主语言流程控制 | 需预编译,调试不便 |
| 通用数据接口 | ODBC(C)、JDBC(Java)、ADO.NET | 屏蔽 DBMS 差异,跨库可移植 | 多一层转换,性能略损 |
| ORM | Hibernate(全自动)、MyBatis(半自动)、JPA | 面向对象、开发效率高 | 有阻抗不匹配,易 N+1、懒加载陷阱 |
关键概念:ODBC 由驱动管理器 + 驱动构成;JDBC 四类驱动中,Type 4(纯 Java 网络协议驱动)最常用。存储过程与触发器把逻辑下沉到数据库,减少网络往返,但不利于移植与版本管理。
2.5 NoSQL 数据库
共同特点:非关系模型、无固定 Schema、水平扩展、支持海量数据、弱事务(BASE)、最终一致性。
NoSQL 四类对比(必背)
| 类型 | 代表产品 | 数据模型 | 适用场景 |
|---|---|---|---|
| 键值 KV | Redis、Memcached | key → value | 缓存、会话、计数、超高并发简单读写 |
| 列族 | HBase、Cassandra | 行键 + 列族 + 时间戳 | 海量稀疏数据、日志、时序、宽表 |
| 文档 | MongoDB、CouchDB | JSON/BSON 文档 | 半结构化数据、内容管理、快速迭代 |
| 图 | Neo4j、JanusGraph | 节点 + 边 + 属性 | 社交网络、知识图谱、多跳关系查询 |
CAP 与 BASE:CAP 指一致性、可用性、分区容忍性三者不可同时满足;分布式系统必须容忍分区,故只能在 CP(HBase、MongoDB 默认)与 AP(Cassandra、DynamoDB)之间取舍。BASE = 基本可用 + 软状态 + 最终一致性。
体系框架(四层):接口层(REST/API/客户端)→ 数据模型层(KV/文档/列/图)→ 数据存储层(内存、LSM 树、列式)→ 持久化层(本地文件系统/HDFS)。
部署:客户端 → 协调节点(路由)→ 数据节点(分片 + 多副本)。
分布式数据库的六种透明性
| 透明性 | 含义 |
|---|---|
| 分片透明 | 用户无需知道数据如何分片,透明性最高 |
| 位置透明 | 无需知道数据存放在哪个站点 |
| 复制透明 | 无需知道副本数量与位置 |
| 模型透明 | 无需知道局部站点的数据模型差异 |
| 局部映像透明 | 无需知道局部数据库的模式映射 |
| 分布透明 | 整体上把分布式库当作单一逻辑库使用 |
选型:强事务、复杂关联、报表 → 关系库;高并发写、海量半结构化、弹性扩展 → NoSQL;实际多为「关系库 + 缓存 + 搜索」混合。
三、易混淆概念对比
| A | B | 关键区别 |
|---|---|---|
| 外模式 | 模式 | 外模式是用户视图(可多个);模式是全局逻辑结构(只有一个) |
| 逻辑独立性 | 物理独立性 | 外/模式映像保证逻辑独立性;模式/内映像保证物理独立性 |
| 候选码 | 主码 | 候选码是能唯一标识的最小属性集,可有多个;主码是选中的一个 |
| 2NF | 3NF | 2NF 消除非主属性对码的部分依赖;3NF 再消除传递依赖 |
| 3NF | BCNF | 3NF 允许主属性对码的传递依赖;BCNF 要求每个决定因素都含候选码 |
| 无损连接 | 保持函数依赖 | 无损是可还原;保持依赖是不丢约束;3NF 可兼得,BCNF 不一定 |
| 选择 | 投影 | 选择按行筛选(σ);投影按列筛选(π) |
| 实体完整性 | 参照完整性 | 主码非空唯一;外码必须引用存在的主码或为空 |
| ODBC | JDBC | ODBC 面向 C 与多语言;JDBC 面向 Java |
| ORM 全自动 | ORM 半自动 | Hibernate 自动生成 SQL;MyBatis 手写 SQL、只做映射 |
| CP | AP | CP 保一致牺牲可用(HBase);AP 保可用、最终一致(Cassandra) |
四、常见考法与出题角度
| 出题角度 | 典型问法 | 应对 | 陷阱 |
|---|---|---|---|
| 范式判定 | 「该关系最高属于第几范式」 | 先求候选码,再查部分/传递依赖 | 只看属性名不看依赖 |
| 分解 | 「哪个分解是无损连接」 | 用自然连接还原检验 | 与保持依赖混淆 |
| 关系代数 | 「查询选修全部课程的学生」 | 用除运算 | 误用连接 |
| 元组数计算 | 「R 有 3 元组、S 有 4 元组,R×S 几元组」 | 3×4=12 | 误答 7 |
| 模式映像 | 「存储结构改变不影响逻辑结构靠」 | 模式/内模式映像 | 误答外/模式 |
| E-R 转换 | 「M:N 联系如何转换」 | 必须独立建表,码为两码组合 | 误并入某一端 |
| 设计步骤 | 「E-R 图属于哪个阶段产物」 | 概念结构设计 | 误答逻辑设计 |
| 接口识别 | 「Hibernate 属于哪种交互方式」 | ORM | 误答通用接口 |
| NoSQL 选型 | 「知识图谱多跳查询选哪种」 | 图数据库 | 误选文档库 |
| CAP | 「HBase 属于 CP 还是 AP」 | CP | 误答 AP |
| 透明性 | 「透明性最高的是」 | 分片透明 | 误答位置透明 |
案例题角度:补全 E-R 图与关系模式(标注主外码)、判断范式并给出分解、设计索引与分区方案、在读写压力下讨论反规范化与缓存策略。
五、速记与自测
速记
- 三模式:外、模、内;两映像:外/模→逻辑,模/内→物理
- 关系代数五基本:并、差、积、选、投(导出:交、连、除)
- 范式:1 原子、2 完全、3 传递、B 决定(BCNF 看决定因素)
- E-R 三规则:1:1 随便并、1:N 并 N 端、M:N 必独立
- 设计六步:需、概、逻、物、实、维
- 交互四类:库函数、嵌 SQL、通用接口、ORM
- NoSQL 四类:KV 快、列族宽、文档活、图连
- CAP:三者不可兼得,P 必选
自测
- 关系模式 R(学号, 课程号, 姓名, 成绩),候选码为 (学号,课程号),它满足第几范式?为什么?
- R 有 3 个属性、5 个元组,S 有 4 个属性、2 个元组,R×S 的度与元组数各是多少?
- M:N 联系转换成关系模式后,码是什么?
答案:1. 只满足 1NF;因为「姓名」只依赖学号,存在对候选码的部分函数依赖,不满足 2NF,应拆为 (学号,姓名) 与 (学号,课程号,成绩)。2. 度为 7,元组数为 10。3. 两端实体主码的组合。