=================================== 数据库原理 =================================== 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模型(实体-联系模型) 2. **逻辑模型** 逻辑模型是数据的逻辑结构,独立于物理实现。 常见类型: - 层次模型 - 网状模型 - 关系模型 - 面向对象模型 3. **物理模型** 物理模型是数据的存储结构,依赖于具体的DBMS。 1.3 数据库系统的结构 --------------------- **三级模式结构** 1. **外模式(用户模式)** 外模式是用户与数据库系统的接口,是用户的数据视图。 2. **模式(逻辑模式)** 模式是数据库中全体数据的逻辑结构和特征的描述。 3. **内模式(物理模式)** 内模式是数据物理结构和存储方式的描述。 **两级映像** 1. **外模式/模式映像** 保证数据与程序的逻辑独立性。 2. **模式/内模式映像** 保证数据与程序的物理独立性。 2. 关系数据库 =================================== 2.1 关系模型 --------------------- **关系模型的基本概念** 1. **关系** 关系是一个二维表,对应现实世界的一个实体集。 2. **元组** 元组是表中的一行,对应现实世界的一个实体。 3. **属性** 属性是表中的一列,对应现实世界的一个属性。 4. **域** 域是属性的取值范围。 5. **码** 码是唯一标识元组的属性或属性组。 - 候选码:能唯一标识元组的最小属性集 - 主码:被选定的候选码 - 外码:引用其他表主码的属性 **关系模型的完整性约束** 1. **实体完整性** 主码不能为空,且必须唯一。 2. **参照完整性** 外码的值必须是空值或者被引用表中存在的主码值。 3. **用户定义的完整性** 用户根据具体应用环境定义的约束。 2.2 关系代数 --------------------- **关系代数的基本运算** 1. **选择** 选择是从关系中选择满足给定条件的元组。 σ_条件(R) 2. **投影** 投影是从关系中选择某些属性。 π_属性(R) 3. **连接** 连接是将两个关系按一定条件组合。 R ∞_条件 S 4. **除** 除是同时满足除关系中所有属性的元组。 R ÷ S **关系代数的组合运算** 1. **并** R ∪ S 2. **差** R - S 3. **笛卡尔积** R × S 4. **交** 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)** 事务要么全部执行,要么全部不执行。 2. **一致性(Consistency)** 事务执行前后数据库保持一致性状态。 3. **隔离性(Isolation)** 多个事务并发执行时,彼此隔离。 4. **持久性(Durability)** 事务提交后,对数据库的修改永久有效。 5.2 事务控制语句 --------------------- **定义事务** :: BEGIN TRANSACTION; -- 开始事务 COMMIT; -- 提交事务 ROLLBACK; -- 回滚事务 SAVEPOINT 保存点; -- 设置保存点 ROLLBACK TO SAVEPOINT 保存点; -- 回滚到保存点 5.3 并发控制 --------------------- **并发问题** 1. **丢失更新** 两个事务同时更新同一数据,后一个事务覆盖前一个事务的更新。 2. **不可重复读** 一个事务两次读取同一数据,结果不同。 3. **读脏数据** 一个事务读取了另一个事务未提交的数据。 4. **幻影** 一个事务两次查询,结果集不同。 **封锁协议** 1. **X锁(排他锁)** 又称写锁,用于写操作。 2. **S锁(共享锁)** 又称读锁,用于读操作。 **三级封锁协议** 1. 一级封锁协议:防止丢失更新 2. 二级封锁协议:防止丢失更新和读脏数据 3. 三级封锁协议:防止丢失更新、读脏数据和不可重复读 **两段锁协议** 在扩展阶段对数据加锁,在收缩阶段释放锁。 5.4 隔离级别 --------------------- **隔离级别** 1. **读未提交(Read Uncommitted)** 最低隔离级别,可能出现脏读。 2. **读已提交(Read Committed)** 避免脏读,可能出现不可重复读。 3. **可重复读(Repeatable Read)** 避免脏读和不可重复读,可能出现幻读。 4. **串行化(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数据库 - 云数据库 - 区块链数据库 数据库技术日新月异,掌握数据库原理将为你的学习和工作提供强大的支持。