数据库原理

0. 要点汇总

本篇文章的要点整理如下

  • 数据库:长期存储在计算机内的有组织、可共享的大量数据的集合

  • 数据库管理系统(DBMS):管理数据库的软件系统

  • 数据模型:描述数据、数据联系、数据语义、数据约束的工具

  • 概念模型:现实世界的抽象,如ER模型

  • 逻辑模型:数据的逻辑结构,如层次模型、网状模型、关系模型

  • 物理模型:数据的存储结构

  • 关系模型:用二维表表示实体和关系的模型

  • 关系:一个二维表,对应现实世界的一个实体集

  • 元组:表中的一行,对应现实世界的一个实体

  • 属性:表中的一列,对应现实世界的一个属性

  • 主键:唯一标识元组的属性或属性组

  • 外键:引用其他表主键的属性

  • SQL:结构化查询语言,用于数据库的查询和操作

  • 范式:关系数据库设计的规范,减少数据冗余和异常

  • 第一范式(1NF):每个属性都是不可分割的原子值

  • 第二范式(2NF):满足1NF,且非主属性完全依赖于主键

  • 第三范式(3NF):满足2NF,且非主属性不传递依赖于主键

  • BCNF(Boyce-Codd范式):更强的3NF

  • 事务:数据库操作的基本单位,具有ACID特性

  • 原子性(Atomicity):事务要么全部执行,要么全部不执行

  • 一致性(Consistency):事务执行前后数据库保持一致性状态

  • 隔离性(Isolation):多个事务并发执行时,彼此隔离

  • 持久性(Durability):事务提交后,对数据库的修改永久有效

  • 索引:提高查询效率的数据结构,如B树、B+树索引

  • 视图:虚表,从一个或多个表中导出的表

  • 存储过程:预编译的SQL代码,存储在数据库中

  • 触发器:自动执行的SQL代码,由特定事件触发

  • 并发控制:处理多个用户同时访问数据库的机制

  • 锁:防止并发访问冲突的机制

  • 数据库恢复:在数据库故障时恢复数据的技术

1. 数据库系统概述

1.1 数据库的基本概念

数据

数据是描述事物的符号记录。

数据库

数据库(Database, DB)是长期存储在计算机内的有组织、可共享的大量数据的集合。

数据库管理系统

数据库管理系统(Database Management System, DBMS)是位于用户与操作系统之间的一层数据管理软件。

数据库系统

数据库系统(Database System, DBS)是指在计算机系统中引入数据库后的系统。

数据库系统的特点

  1. 数据结构化

  2. 数据的共享性高、冗余度低、易扩充

  3. 数据独立性高

  4. 数据由DBMS统一管理和控制

1.2 数据模型

数据模型的组成要素

  1. 数据结构

  2. 数据操作

  3. 数据的完整性约束

数据模型的分类

  1. 概念模型

概念模型是现实世界的抽象,不涉及计算机系统中的具体实现。

主要工具:ER模型(实体-联系模型)

  1. 逻辑模型

逻辑模型是数据的逻辑结构,独立于物理实现。

常见类型:
  • 层次模型

  • 网状模型

  • 关系模型

  • 面向对象模型

  1. 物理模型

物理模型是数据的存储结构,依赖于具体的DBMS。

1.3 数据库系统的结构

三级模式结构

  1. 外模式(用户模式)

外模式是用户与数据库系统的接口,是用户的数据视图。

  1. 模式(逻辑模式)

模式是数据库中全体数据的逻辑结构和特征的描述。

  1. 内模式(物理模式)

内模式是数据物理结构和存储方式的描述。

两级映像

  1. 外模式/模式映像

保证数据与程序的逻辑独立性。

  1. 模式/内模式映像

保证数据与程序的物理独立性。

2. 关系数据库

2.1 关系模型

关系模型的基本概念

  1. 关系

关系是一个二维表,对应现实世界的一个实体集。

  1. 元组

元组是表中的一行,对应现实世界的一个实体。

  1. 属性

属性是表中的一列,对应现实世界的一个属性。

域是属性的取值范围。

码是唯一标识元组的属性或属性组。

  • 候选码:能唯一标识元组的最小属性集

  • 主码:被选定的候选码

  • 外码:引用其他表主码的属性

关系模型的完整性约束

  1. 实体完整性

主码不能为空,且必须唯一。

  1. 参照完整性

外码的值必须是空值或者被引用表中存在的主码值。

  1. 用户定义的完整性

用户根据具体应用环境定义的约束。

2.2 关系代数

关系代数的基本运算

  1. 选择

选择是从关系中选择满足给定条件的元组。

σ_条件(R)

  1. 投影

投影是从关系中选择某些属性。

π_属性(R)

  1. 连接

连接是将两个关系按一定条件组合。

R ∞_条件 S

除是同时满足除关系中所有属性的元组。

R ÷ S

关系代数的组合运算

R ∪ S

R - S

  1. 笛卡尔积

R × S

R ∩ S

2.3 关系演算

元组关系演算

元组关系演算是基于元组变量的关系演算。

域关系演算

域关系演算是基于域变量的关系演算。

3. 数据库设计

3.1 数据库设计概述

数据库设计的目标

  • 满足用户需求

  • 良好的数据库性能

  • 对应用系统有良好的支持

数据库设计的方法

  • 新奥尔良方法

  • 基于E-R模型的数据库设计方法

  • 3NF(第三范式)的设计方法

数据库设计的基本步骤

  1. 需求分析

  2. 概念结构设计

  3. 逻辑结构设计

  4. 物理结构设计

  5. 数据库实施

  6. 数据库运行和维护

3.2 需求分析

需求分析的任务

了解用户需求,确定系统功能。

需求分析的方法

  • 调查

  • 分析

  • 抽象

数据字典

数据字典是数据收集和数据分析的主要成果。

3.3 概念结构设计

概念结构设计的方法

  • 自顶向下

  • 自底向上

  • 逐步扩张

  • 混合策略

E-R模型

E-R模型(Entity-Relationship Model)是实体-联系模型。

E-R图的基本元素

  1. 实体:矩形

  2. 属性:椭圆

  3. 联系:菱形

联系的类型

  1. 一对一联系(1:1)

  2. 一对多联系(1:n)

  3. 多对多联系(m:n)

3.4 逻辑结构设计

E-R图向关系模型的转换

  1. 实体转换为关系

  2. 联系转换为关系

  3. 根据需要进行规范化

3.5 数据库规范化

规范化的目的

  • 消除数据冗余

  • 避免更新异常

  • 保持数据一致性

第一范式(1NF)

每个属性都是不可分割的原子值。

第二范式(2NF)

满足1NF,且非主属性完全依赖于主键。

第三范式(3NF)

满足2NF,且非主属性不传递依赖于主键。

BCNF(Boyce-Codd范式)

满足3NF,且所有属性都不传递依赖于主键。

4. SQL语言

4.1 SQL概述

SQL的特点

  • 综合统一

  • 高度非过程化

  • 面向集合的操作方式

  • 提供两种使用方式

  • 语言简洁,易学易用

SQL的功能

  • 数据定义

  • 数据查询

  • 数据操纵

  • 数据控制

4.2 数据定义

定义基本表

CREATE TABLE 表名 (
    列名 数据类型 [约束],
    列名 数据类型 [约束],
    ...
    [约束]
);

修改基本表

ALTER TABLE 表名 [ADD 列名 数据类型];
ALTER TABLE 表名 [MODIFY 列名 数据类型];
ALTER TABLE 表名 [DROP 列名];

删除基本表

DROP TABLE 表名;

定义索引

CREATE INDEX 索引名 ON 表名(列名);

删除索引

DROP INDEX 索引名;

4.3 数据查询

基本查询

SELECT [DISTINCT] 列名1, 列名2...
FROM 表名
[WHERE 条件]
[GROUP BY 列名 [HAVING 条件]]
[ORDER BY 列名 [ASC|DESC]]
[LIMIT 数量];

连接查询

-- 内连接
SELECT * FROM 表1 INNER JOIN 表2 ON 表1. = 表2.;

-- 左连接
SELECT * FROM 表1 LEFT JOIN 表2 ON 表1. = 表2.;

-- 右连接
SELECT * FROM 表1 RIGHT JOIN 表2 ON 表1. = 表2.;

-- 全连接
SELECT * FROM 表1 FULL JOIN 表2 ON 表1. = 表2.;

子查询

SELECT * FROM 表名
WHERE 列名 = (SELECT 列名 FROM 表名 WHERE 条件);

集合操作

-- 
SELECT * FROM 表1 UNION SELECT * FROM 表2;

-- 
SELECT * FROM 表1 INTERSECT SELECT * FROM 表2;

-- 
SELECT * FROM 表1 EXCEPT SELECT * FROM 表2;

4.4 数据操纵

插入数据

INSERT INTO 表名 (列1, 列2...) VALUES (值1, 值2...);

更新数据

UPDATE 表名 SET 列1=值1, 列2=值2... WHERE 条件;

删除数据

DELETE FROM 表名 WHERE 条件;

4.5 数据控制

授予权限

GRANT 权限 ON 对象 TO 用户 [WITH GRANT OPTION];

收回权限

REVOKE 权限 ON 对象 FROM 用户;

创建用户

CREATE USER 用户名 IDENTIFIED BY 密码;

删除用户

DROP USER 用户名;

5. 事务管理

5.1 事务的概念

事务的定义

事务是用户定义的一个数据库操作序列,这些操作要么全做,要么全不做,是一个不可分割的工作单位。

事务的ACID特性

  1. 原子性(Atomicity)

事务要么全部执行,要么全部不执行。

  1. 一致性(Consistency)

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

  1. 隔离性(Isolation)

多个事务并发执行时,彼此隔离。

  1. 持久性(Durability)

事务提交后,对数据库的修改永久有效。

5.2 事务控制语句

定义事务

BEGIN TRANSACTION; -- 开始事务
COMMIT; -- 提交事务
ROLLBACK; -- 回滚事务
SAVEPOINT 保存点; -- 设置保存点
ROLLBACK TO SAVEPOINT 保存点; -- 回滚到保存点

5.3 并发控制

并发问题

  1. 丢失更新

两个事务同时更新同一数据,后一个事务覆盖前一个事务的更新。

  1. 不可重复读

一个事务两次读取同一数据,结果不同。

  1. 读脏数据

一个事务读取了另一个事务未提交的数据。

  1. 幻影

一个事务两次查询,结果集不同。

封锁协议

  1. X锁(排他锁)

又称写锁,用于写操作。

  1. S锁(共享锁)

又称读锁,用于读操作。

三级封锁协议

  1. 一级封锁协议:防止丢失更新

  2. 二级封锁协议:防止丢失更新和读脏数据

  3. 三级封锁协议:防止丢失更新、读脏数据和不可重复读

两段锁协议

在扩展阶段对数据加锁,在收缩阶段释放锁。

5.4 隔离级别

隔离级别

  1. 读未提交(Read Uncommitted)

最低隔离级别,可能出现脏读。

  1. 读已提交(Read Committed)

避免脏读,可能出现不可重复读。

  1. 可重复读(Repeatable Read)

避免脏读和不可重复读,可能出现幻读。

  1. 串行化(Serializable)

最高隔离级别,完全避免并发问题。

设置隔离级别

SET TRANSACTION ISOLATION LEVEL 隔离级别;

6. 数据库恢复技术

6.1 故障类型

事务故障

事务执行到一半由于错误无法继续执行。

系统故障

由于硬件故障或软件错误导致系统停止运行。

介质故障

由于硬件故障导致存储介质损坏。

计算机病毒

病毒破坏数据库。

6.2 恢复技术

数据转储

定期将数据库复制到安全的地方。

日志文件

记录数据库的所有修改操作。

检查点

在日志中标记检查点,用于快速恢复。

恢复策略

  1. 利用转储和日志恢复数据库

  2. 利用检查点快速恢复

7. 索引技术

7.1 索引的概念

索引的定义

索引是加快查询速度的数据库对象。

索引的分类

  1. 按索引结构分类: - B树索引 - B+树索引 - 哈希索引 - 位图索引

  2. 按索引列的多少分类: - 单列索引 - 复合索引

  3. 按索引值唯一性分类: - 唯一索引 - 非唯一索引

7.2 B+树索引

B+树的特点

  • 平衡的多路查找树

  • 所有叶子节点在同一层

  • 叶子节点通过指针连接

B+树的查找

从根节点开始,沿着指针查找,直到叶子节点。

B+树的插入

找到插入位置,插入记录,如果节点溢出则分裂。

B+树的删除

删除记录,如果节点下溢则合并或重新分配。

7.3 哈希索引

哈希索引的特点

  • 基于哈希函数

  • 适合等值查询

  • 不适合范围查询

哈希冲突

不同的键映射到相同的哈希值。

冲突解决方法

  1. 开放寻址法

  2. 链地址法

8. 视图、存储过程和触发器

8.1 视图

视图的定义

视图是从一个或多个表中导出的虚表。

视图的作用

  • 简化查询

  • 数据安全

  • 逻辑数据独立性

创建视图

CREATE VIEW 视图名 AS 查询语句;

删除视图

DROP VIEW 视图名;

8.2 存储过程

存储过程的定义

存储过程是预编译的SQL代码,存储在数据库中。

存储过程的作用

  • 提高性能

  • 减少网络流量

  • 增强安全性

创建存储过程

CREATE PROCEDURE 存储过程名 (参数)
AS
BEGIN
    SQL语句;
END;

执行存储过程

EXECUTE 存储过程名 参数;

8.3 触发器

触发器的定义

触发器是自动执行的SQL代码,由特定事件触发。

触发器的类型

  1. 行级触发器

  2. 语句级触发器

触发器的时机

  1. BEFORE触发器

  2. AFTER触发器

创建触发器

CREATE TRIGGER 触发器名
BEFORE/AFTER INSERT/UPDATE/DELETE ON 表名
FOR EACH ROW
BEGIN
    SQL语句;
END;

删除触发器

DROP TRIGGER 触发器名;

9. 数据库安全

9.1 安全性控制

用户标识与鉴别

确认用户身份。

存取控制

控制用户对数据的访问。

审计

记录数据库的所有操作。

视图和存储过程

限制用户对底层表的直接访问。

9.2 存取控制方法

自主存取控制(DAC)

用户对数据的存取权限由用户决定。

强制存取控制(MAC)

系统强制执行安全策略。

10. 数据库优化

10.1 查询优化

查询优化的目标

  • 提高查询速度

  • 减少资源消耗

查询优化的方法

  1. 创建适当的索引

  2. 避免全表扫描

  3. 优化SQL语句

  4. 使用视图

  5. 合理使用连接

10.2 数据库性能调优

硬件调优

  • 增加内存

  • 使用更快的磁盘

  • 使用RAID

软件调优

  • 优化数据库配置

  • 优化表结构

  • 优化索引

  • 优化SQL语句

10.3 数据库维护

数据库备份

定期备份数据库,防止数据丢失。

数据库恢复

从备份中恢复数据库。

数据库重组

重新组织数据库,提高性能。

数据库重构

修改数据库结构,适应新的需求。

11. 应用领域

11.1 企业应用

  • ERP(企业资源计划)

  • CRM(客户关系管理)

  • HRM(人力资源管理)

11.2 Web应用

  • 电子商务

  • 社交网络

  • 内容管理系统

11.3 科学计算

  • 数据分析

  • 科学研究

  • 工程计算

11.4 大数据

  • 数据仓库

  • 数据挖掘

  • 机器学习

12. 总结与展望

数据库原理是计算机科学的重要分支,研究数据的组织、存储、管理和使用。从数据模型到SQL语言从事务管理到查询优化,数据库技术不断发展,为信息社会的繁荣提供了强大的支撑。

核心价值

  • 数据持久化

  • 数据共享

  • 数据一致性

  • 数据安全

学习建议

  • 理解基本概念和原理

  • 掌握SQL语言

  • 学习数据库设计

  • 实践数据库开发

  • 关注性能优化

进阶方向

  • 分布式数据库

  • NoSQL数据库

  • NewSQL数据库

  • 云数据库

  • 区块链数据库

数据库技术日新月异,掌握数据库原理将为你的学习和工作提供强大的支持。