数据库基础概念
1.1 基础概念
数据是描述事物的符号;数据库是按一定结构组织的数据集合;数据库系统则是包含 DB、DBMS、应用、用户和 DBA 的整体环境。
- 关系数据库
- 面向对象数据库
- 对象关系数据库
1.2 发展阶段
- 人工管理阶段 — 数据不保存、无管理软件、不共享、不独立。
- 文件系统阶段 — 数据以文件形式长期保存,但冗余大、独立性差。
- 数据库系统阶段 — 结构化存储、共享性高、独立性强、由 DBMS 统一管理。
1.3 数据模型
数据的约束条件(三大完整性)
| 类型 | 含义 | 示例 |
|---|---|---|
| 实体完整性 | 实体的主属性不能取空值 | 学生表中"学号"不能为 NULL |
| 参照完整性 | 关系数据库中主要指外键参照的完整性 | 选课表的学号必须存在于学生表中 |
| 用户定义完整性 | 具体应用所对应的数据必须满足一定的约束条件 | 成绩范围 0–100;性别只能取男/女 |
历史阶段
- 层次和网状数据库系统
- 关系型数据库系统
- 第三代数据库系统:NoSQL
1.4 数据库管理系统 (DBMS)
主要功能(五大功能)
数据定义 · 数据库操作 · 数据库运行管理 · 数据组织存储和管理 · 数据库的建立与维护
特点
- 数据结构化且统一管理
- 有较高的数据独立性
- 数据控制功能
数据控制功能(四项)
防止未授权用户访问数据。
保证数据的正确性和一致性。
多用户并发访问时的协调机制。
发生故障后将数据库恢复到正确状态。
1.5 数据库的三级模式与两级映像
从数据库系统体系结构看 · 三级
从 DBMS 角度看 · 三级模式
| 模式 | 别称 | 含义 |
|---|---|---|
| 外模式 | 子模式 / 用户模式 | 描述用户看到或使用的那部分数据的逻辑结构,用户根据外模式用数据操作语句或应用程序去操作数据库中的数据。 |
| 概念模式 | 模式 | 数据库中全体数据的逻辑结构和特征的描述,是所有用户的公共数据视图。 |
| 内模式 | 存储模式 | 数据物理结构和存储方式的描述,定义所有的内部记录类型、索引和文件的组织方式等。 |
两级映像与两种独立性
逻辑独立性:应用程序与数据库中的逻辑结构独立。当数据的逻辑结构改变时,应用程序不变。
物理独立性:应用程序与磁盘中的数据互相独立。当数据的物理存储改变时,应用程序不变。
关系数据库
2.1 基本概念
| 术语 | 定义 |
|---|---|
| 属性 | 描述事物所取的若干特征。 |
| 域 | 每个属性的取值范围对应一个值的集合,称为该属性的域。 |
| 目 / 度 | 指一个关系中属性的个数。 |
| 候选码 | 若关系中的某一属性或属性组的值能唯一地标识一个元组,则称该属性为候选码。 |
| 主码 / 主键 | 若一个关系有多个候选码,则选定其中一个作为主码。 |
| 主属性 | 包含在任何候选码中的属性称为主属性。 |
| 外码 | 关系模式 R 中的属性或属性组不是 R 的码,但它是其他关系的码,则对 R 而言是外码。 |
| 全码 All-key | 关系模型的所有属性组是这个关系模式的候选码,称为全码。 |
| 笛卡尔积 | 两个关系所有元组的有序对组合。 |
2.2 关系数据库模式
- 数据库中要区分型和值。
- 关系数据库中的型也称为关系数据库模式,是关系数据库结构的描述,包括若干域的定义以及在这些域上定义的若干关系模式。
- 关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常称之为关系数据库。
2.3 关系代数运算
基本集合运算
| 运算 | 含义 |
|---|---|
| 并 ∪ | 关系 R 与 S 的并是由属于 R 或属于 S 的元组构成的集合。 |
| 差 − | 关系 R 与 S 的差是由属于 R 但不属于 S 的元组构成的集合。 |
| 交 ∩ | 关系 R 与 S 的交是由属于 R 同时又属于 S 的元组构成的集合。 |
| 广义笛卡尔积 × | 两个元数分别为 n 目和 m 目的关系 R 和 S 的广义笛卡尔积是一个 (n+m) 列的元组的集合。 |
专门的关系运算
| 运算 | 含义 |
|---|---|
| 选择 σ | 取得关系 R 中符合条件的行。 |
| 投影 π | 取得关系 R 中符合条件的列。 |
| 等值连接 | 选取关系 R、S,取两者笛卡儿积中属性值相等的元组。 |
| 自然连接 ⋈ | 一种特殊的等值连接,比较的属性列必须是相同的属性组,并把结果中重复属性去掉。 |
| 除 ÷ | 从一个关系中筛选出所有能与另一关系中全部元组都匹配的元组,最终保留前者中不与后者属性重叠的属性列。 |
| 广义投影 | 允许在投影列表中使用算术运算,实现了对投影运算的扩充。 |
外连接 · 三种
保留左关系全部元组,右关系无匹配时填 NULL。
保留右关系全部元组,左关系无匹配时填 NULL。
左右关系全部元组都保留,无匹配处填 NULL。
聚集函数
对数据表中某列(或满足条件的列数据)进行汇总计算(如求和、计数、求平均等)并返回单一结果值的函数。常见:SUM · COUNT · AVG · MAX · MIN。
数据库设计
3.1 数据库设计的基本步骤
3.2 数据需求分析
用户需求分析是综合各用户的应用需求,对现实世界要处理的对象进行详细调查;在了解先行系统的概况、确定新系统功能的过程中,协助用户明确对新系统的信息要求、处理要求和系统要求,确定新系统的边界。
- 信息要求
- 处理要求
- 系统要求
3.3 概念结构设计 · 实体-联系模型
- 概念模型的主要方法为实体-联系方法,简称 E-R 方法。
- 方法流程:选择局部应用 → 逐一设计分 E-R 图 → E-R 图合并。
E-R 图的三个要素
| 要素 | 表示方法 |
|---|---|
| 实体(型) | 用矩形框表示,框内标注实体名称。 |
| 属性 | 用椭圆形表示,并用连线与实体连接起来。 |
| 实体之间的联系 | 用菱形框表示,框内标注联系名称,用连线将菱形框分别与有关实体相连,并在连线上注明联系类型。 |
3.4 逻辑结构设计
- 在概念结构设计的基础上进行数据模型设计。
- 主要工作步骤:
- 确定数据模型
- 将 E-R 图转换成为指定的数据模型
- 确定完整性约束
- 确定用户视图
3.5 物理设计
主要工作步骤包括确定数据分布、存储结构和访问方式。
3.6 数据库实施
根据逻辑和物理设计的结果,在计算机上建立起实际的数据库结构、数据加载(或称装入),进行试运行和评价的过程,叫作数据库的实施(或称实现)。
3.7 数据库运行维护
数据库运行维护主要包括对数据库性能的监测和改善、故障恢复、数据库的重组和重构。在数据库运行阶段,对数据库的维护主要由 DBA 完成。
主要维护工作
- 对数据库性能的监测和改善
- 数据库的备份及故障恢复
- 数据库重组和重构
3.8 商业智能 (BI) 与数据仓库
关键特征:面向主题 · 集成的 · 非易失的 · 时变的。
应用程序与数据库的交互
4.1 库函数级别访问接口
- 数据库提供的最底层的高级程序语言访问数据接口。
- 缺点:强依赖于特定的数据库;需开发人员对数据库机制有较深的理解;学习难度较大;开发效率不高。
4.2 嵌入式 SQL 访问接口
嵌入式 SQL (Embedded SQL) 是一种将 SQL 语句直接写入某些高级程序语言源代码中的方法。
4.3 通用数据接口标准
常见数据库接口
| 缩写 | 全称 |
|---|---|
| DAO | Data Access Object · 数据库访问对象 |
| RDO | Remote Data Object · 远程数据库对象 |
| ADO | ActiveX Data Object · ActiveX 数据对象 |
| JDBC | Java DataBase Connection · Java 数据库连接 |
4.4 ORM 访问接口
对象关系映射 (Object Relationship Mapping):用于实现面向对象编程语言里不同类型系统数据之间的转换。
全自动化的框架,强大、复杂、笨重,学习成本高。
半自动的框架。
Java 自带的框架。
NoSQL 数据库
5.1 分类
应对分布式存储的海量数据,键指向多个列,列由列族安排(如 HBase、Cassandra)。
哈希表 + 指针指向特定数据,简单易部署(如 Redis、Memcached)。
键值数据库的升级版,允许嵌套键值,半结构化文档(如 JSON、BSON),代表:MongoDB。
采用灵活的图形模型,适合社交网络、生物网络等关系密集场景(如 Neo4J)。
5.2 特点(共四点)
- 易扩展 — 去掉了关系特性,数据间无关系,非常容易扩展。
- 大数据量、高性能 — 得益于无关系性,数据库的结构简单。
- 灵活的数据模型 — 无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。
- 高可用 — 不太影响性能的情况下,可方便地实现高可用的架构。
5.3 NoSQL 体系框架
整体分为 4 层,由下至上:
分布式数据库
6.1 体系结构
6.2 特点(四性)
数据存储在不同节点,但被各应用共享。
每个节点独立管理本地数据。
部分节点故障不影响整体使用。
数据分布在不同的物理位置。
6.3 分布透明性
| 透明性 | 用户/应用程序需要了解 |
|---|---|
| 分片透明性 | 只对全局关系进行操作,不必考虑数据的分片。 |
| 位置透明性 | 应当了解分片情况,但不必了解片段的存储场地。 |
| 局部数据模型透明性 | 应当了解分片及各片断存储的场地,但不必了解局部场地上使用的是何种数据模型。 |
数据库优化技术
7.1 集中式数据库优化技术
在多个表中保留相同列,减少表连接。
由其他列计算得出,避免重复计算。
将常一起查询的列合并到同一张表。
按行分割,将不同元组放入不同表。
按列分割,将不同属性放入不同表。
7.2 分布式数据库优化技术
主库写、从库读,提升读性能并备份。
写请求走主库、读请求走从库。
将大表拆分为多张小表,水平/垂直均可。
按业务或数据分布拆分到不同数据库。
分布式缓存技术 · Redis
8.1 数据类型
| 类型 | 说明 |
|---|---|
| string | Redis 基本类型。可用于缓存层或计数器。 |
| hash | 代替 string 类型,节省空间。 |
| set | 无序集合,每个值不能重复。 |
| list | 双向链表结构,可以模拟栈、队列等形式。 |
| zset | 有序集合,每个元素有一个分数。 |
8.2 访问方式
- 根据 key 读缓存
- 读取成功则直接返回
- 若 key 不在缓存中,根据 key 读数据库
- 读取成功后,写缓存
- 成功返回
- 根据 key 值写数据库
- 成功后更新缓存 key 值
- 成功返回
8.3 过期策略
Redis 定期主动扫描并删除过期 key。
访问 key 时检查是否过期,若过期则删除并返回空。
8.4 数据持久化
定时将内存数据完整快照写入磁盘文件,恢复快、占用小。
记录每个写操作命令,重启时回放恢复,数据更安全。
8.5 缓存异常问题
| 问题 | 触发条件 |
|---|---|
| 缓存穿透 | 大量请求访问了没有缓存的 key(key 在数据库中也不存在)。 |
| 缓存雪崩 | 大量请求访问到缓存中的 key,这些 key 是存在的,但同时到了过期时间。 |
| 缓存击穿 | 少量热点 key 缓存时间失效,使得请求直接访问数据库。 |
8.6 Redis 集群
Redis 也可以采用集群的方式部署。主要集群方式:
- 主从复制集群
- 哨兵集群
- Cluster 集群
集群切片方式主要分为三种:
- 客户端分片
- 代理分片
- 服务器端分片