🗄️ 数据库系统

从数据模型到分布式数据库的完整体系

数据库系统架构

数据库系统三级模式

👁️

外模式 (External Schema)

用户视图,局部逻辑结构

• 用户接口
• 应用程序视图
• 数据安全性
🧠

概念模式 (Conceptual Schema)

逻辑结构,全局数据视图

• 数据的逻辑结构
• 数据间的关系
• 数据的约束条件
💾

内模式 (Internal Schema)

物理结构,存储方式

• 数据的存储结构
• 存储方法
• 索引组织

数据库系统组成

数据库技术发展历程

数据模型

层次模型 (Hierarchical Model)

🌳

特点

树形结构,父子关系

优点

结构简单,查询效率高

缺点

不能表示多对多关系

网状模型 (Network Model)

🕸️

特点

网状结构,多对多关系

优点

能表示复杂关系

缺点

结构复杂,难以理解

关系模型 (Relational Model)

📊

特点

二维表格,关系代数

优点

概念简单,理论完善

应用

目前主流数据库模型

关系模型基本概念

📋

关系 (Relation)

一个二维表格

📝

元组 (Tuple)

表中的一行记录

📊

属性 (Attribute)

表中的一列字段

🔑

主键 (Primary Key)

唯一标识元组

关系数据库设计理论

函数依赖

设X和Y是关系R的两个属性集合,如果对于R的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称X函数确定Y或Y函数依赖于X。

完全函数依赖

Y完全函数依赖于X,当且仅当Y函数依赖于X,但Y不函数依赖于X的任何真子集。

记作:X → Y (完全)

部分函数依赖

Y函数依赖于X,但Y也函数依赖于X的某个真子集。

记作:X → Y (部分)

传递函数依赖

如果X→Y,Y→Z,且Y不包含于X,Z不包含于Y,则称Z传递函数依赖于X。

记作:X → Z (传递)

范式理论 (Normal Forms)

范式是符合某一种级别的关系模式的集合,是为了消除关系中不合适的数据依赖。

第一范式 (1NF)

关系模式R的所有属性都是不可分的基本数据项。

要求: 每个属性都是原子性的,不可再分

第二范式 (2NF)

关系模式R∈1NF,且每一个非主属性完全函数依赖于主键。

要求: 消除非主属性对主键的部分函数依赖

第三范式 (3NF)

关系模式R∈2NF,且每一个非主属性都不传递依赖于主键。

要求: 消除非主属性对主键的传递函数依赖

BC范式 (BCNF)

关系模式R∈1NF,且对于R的每个函数依赖X→Y,若Y不包含于X,则X必含有R的某个候选键。

要求: 消除主属性对候选键的部分和传递函数依赖

第四范式 (4NF)

关系模式R∈BCNF,且对于R的每个多值依赖X→→Y,X都含有R的某个候选键。

要求: 消除多值依赖

范式化实例演示

原始表(存在问题)

学号 姓名 系名 系主任 课程号 课程名 成绩
001 张三 计算机系 李教授 C001 数据库 85
001 张三 计算机系 李教授 C002 操作系统 90
存在问题: 数据冗余、更新异常、插入异常、删除异常

第三范式(3NF)分解后

学生表
学号 姓名 系号
001 张三 D01
系部表
系号 系名 系主任
D01 计算机系 李教授
选课表
学号 课程号 成绩
001 C001 85
001 C002 90
优点: 消除了数据冗余,避免了更新、插入、删除异常

事务管理

ACID特性

事务是数据库操作的基本单位,必须满足ACID四个特性。

⚛️

原子性 (Atomicity)

事务是不可分割的工作单位

要么全部执行,要么全部不执行
🔄

一致性 (Consistency)

事务执行前后数据库保持一致状态

满足所有完整性约束
🔒

隔离性 (Isolation)

并发执行的事务相互隔离

一个事务不能被其他事务干扰
💾

持久性 (Durability)

已提交事务的修改永久保存

即使系统故障也不会丢失

并发控制问题

丢失修改

两个事务同时修改同一数据,一个事务的修改被另一个覆盖

不可重复读

事务内多次读取同一数据,结果不一致

读脏数据

读取了其他事务未提交的数据

幻读

事务内多次查询,结果集不一致

事务隔离级别

读未提交 (Read Uncommitted)

最低级别,可能出现所有并发问题

读已提交 (Read Committed)

避免脏读,但可能不可重复读

可重复读 (Repeatable Read)

避免脏读和不可重复读

串行化 (Serializable)

最高级别,避免所有并发问题

锁机制

按锁的粒度

表级锁: 锁定整个表
页级锁: 锁定数据页
行级锁: 锁定单行记录

按锁的类型

共享锁(S): 读锁,可并发读
排他锁(X): 写锁,独占访问
意向锁: 表示下层节点锁定意图

锁协议

一级封锁: 修改数据前加X锁
二级封锁: 读数据前加S锁
三级封锁: 事务结束才释放锁

分布式数据库

分布式数据库特点

🌐

分布透明性

用户感觉不到数据分布

🔄

复制透明性

数据复制对用户透明

🎯

分片透明性

数据分片对用户透明

🔧

位置透明性

数据位置对用户透明

水平分片

📊

按行分割表,每个分片包含表的部分行

适用场景

数据量大,按某个属性值分布

垂直分片

📋

按列分割表,每个分片包含表的部分列

适用场景

不同应用访问不同属性

混合分片

🔀

水平分片和垂直分片的组合

适用场景

复杂的分布式环境

分布式事务管理

两阶段提交协议 (2PC)

准备阶段 (Prepare)

协调者询问所有参与者是否可以提交

提交阶段 (Commit)

根据参与者响应决定提交或回滚

三阶段提交协议 (3PC)

CanCommit

询问是否可以提交

PreCommit

预提交阶段

DoCommit

正式提交