🗄️

数据库技术

数据库是现代信息系统的核心,研究如何科学地组织、存储、管理和共享数据。本章介绍数据库基本概念、 数据模型、E-R 图、关系代数、SQL 语言、规范化设计、事务并发控制、安全恢复以及主流数据库产品。

📚 9 个小节🔗 关系模型📝 SQL 语言🔒 事务 ACID

1数据库基础概念

  • 数据(Data):描述事物的符号记录,可以是数字、文字、图形、图像、声音等。
  • 信息:数据经过加工处理后所获得的有意义、有价值的内容。数据是信息的载体,信息是数据的内涵。
  • 数据处理:对数据进行收集、整理、组织、存储、检索、维护、加工和传输的一系列活动。

1.1 四个核心术语

数据库(DB,Database):长期存储在计算机内、有组织的、可共享的大量相关数据的集合。数据按一定数据模型组织,冗余度小、独立性高。

数据库管理系统(DBMS):位于用户与操作系统之间的一层系统软件,提供数据定义、数据操纵、数据库运行管理和建立维护等功能。如 MySQL、Oracle。

数据库系统(DBS):引入数据库后的整个计算机系统,DBS = 数据库 DB + DBMS + 应用程序 + 数据库管理员 DBA + 用户。

1.2 数据管理技术的三个发展阶段

阶段时期特点
人工管理阶段20 世纪 50 年代前数据不保存、由应用程序自带、无共享、冗余极大、不独立
文件系统阶段50-60 年代数据以文件形式长期保存,由文件系统管理;但共享性差、冗余大、数据与程序仍缺乏独立性
数据库系统阶段60 年代后期至今数据结构化、共享性高、冗余度低、独立性高、由 DBMS 统一控制(安全性、完整性、并发、恢复)

1.3 数据库系统的特点

  1. 数据结构化:整体按数据模型组织,不仅描述数据本身,还描述数据间联系(与文件系统的根本区别)。
  2. 数据共享性高、冗余度低、易扩充:多用户、多应用共用数据。
  3. 数据独立性高:物理独立性(存储结构改变,逻辑结构可不改)与逻辑独立性(总体逻辑结构改变,应用程序可不改),由三级模式两级映像保证。
  4. 数据由 DBMS 统一管理和控制:安全性保护、完整性检查、并发控制、数据库恢复。

2数据模型

数据模型是数据库中用来抽象表示现实世界数据及其联系的工具,是数据库系统的核心和基础。 数据模型由三要素组成:数据结构(描述对象及联系,静态特性)、数据操作(增删改查,动态特性)、数据的约束条件(完整性规则)。

2.1 两代/三类数据模型

模型数据结构特点
层次模型树形结构用"一对多"的树表示联系,有且仅有一个根节点;结构简单但难以表达多对多,如 IBM IMS
网状模型有向图允许一个节点有多个父节点,能表达多对多;但结构复杂、用户使用困难(DDM/CODASYL)
关系模型二维表用一张或多张二维表及外键表示数据和联系,概念简单、有数学基础(集合论、谓词逻辑),是当今绝对主流

此外还有面向对象模型、对象-关系模型等。数据抽象的一般过程是:现实世界 → 信息世界(概念模型,如 E-R 图)→ 机器世界(数据模型,如关系表)。

2.2 三级模式结构

  • 外模式(子模式/用户模式):用户看到和使用的局部数据视图,可有多个。
  • 模式(逻辑模式/概念模式):数据库中全体数据的全局逻辑结构,只有一个。
  • 内模式(存储模式):数据物理存储结构的描述,只有一个。

两级映像:外模式/模式映像保证逻辑独立性;模式/内模式映像保证物理独立性。

3概念模型与 E-R 图

在数据库设计之初,先用独立于具体 DBMS 的概念模型描述现实世界,最常用工具是实体-联系模型(E-R 模型)。

3.1 基本要素

  • 实体(Entity):客观存在并可相互区别的事物,如一名学生、一门课程;同型实体的集合称实体集。
  • 属性(Attribute):实体所具有的某一特性,如学号、姓名、年龄。
  • 码/键(Key):能唯一标识一个实体的属性或属性组,如学号。
  • 域(Domain):属性取值的范围,如性别域为 {男, 女},成绩域为 0~100。
  • 联系(Relationship):实体集之间的关联。

3.2 三种联系方式

联系类型含义例子
一对一 1:1A 中一个实体至多与 B 中一个实体对应班级 — 班长
一对多 1:nA 中一个实体对应 B 中多个实体班级 — 学生(一个班有多名学生)
多对多 m:n两边都是多个对应多个学生 — 课程(一个学生选多门课,一门课被多人选)

3.3 E-R 图的画法

  • 矩形表示实体集;椭圆表示属性(用线连到实体);菱形表示联系(线上标注 1、n、m)。
        学号   姓名                    课程号  课程名
         ○     ○                        ○     ○
          ╲   ╱                          ╲   ╱
        ┌────────┐   n    ┌──────────┐   m  ┌────────┐
        │  学生  │────────│  选课    │──────│  课程  │
        └────────┘        │ (成绩)   │      └────────┘
                          └──────────┘
   "学生"与"课程"通过"选课"形成 m:n 联系,联系本身也可带属性"成绩"
📝

把 E-R 图转换为关系表的规则:实体转为一张表;1:n 联系把"一"方的主码放入"多"方作外码;m:n 联系必须单独转为一张表,其主码由两端实体的主码组合而成(如选课表:学号+课程号+成绩)。

4关系数据库与关系代数

4.1 关系的基本术语

关系模型中数据的逻辑结构就是一张二维表,一个关系对应一张表:

学号姓名性别年龄所在系
2026001张三男19计算机
2026002李四女20软件工程
  • 关系(Relation):一张二维表;元组(Tuple):表中一行(一条记录);属性(Attribute):表中一列。
  • 候选码:能唯一标识元组的最小属性组;从中选定一个作为主码(主键),如学号。
  • 外码(外键):表 A 中的属性引用了表 B 的主码,它在 A 中称外码,用于实现表间联系与参照完整性。
  • 主属性:包含在任何一个候选码中的属性;关系模式是对关系的描述:关系名(属性1, 属性2, …)。

4.2 三类完整性约束

  1. 实体完整性:主码不能取空值(主键唯一且非空),否则无法唯一标识元组。
  2. 参照完整性:外码要么取空值,要么等于被参照表中已存在的主码值(学生表的"系编号"必须是系表中真实存在的)。
  3. 用户定义完整性:针对具体业务的规则,如成绩 0~100、姓名非空、年龄为正整数。

4.3 关系代数

关系代数是一种抽象的查询语言,用对关系的运算表达查询。

  • 传统集合运算(要求两关系结构相容):并(∪)、差(−)、交(∩)、笛卡尔积(R 的每一行与 S 的每一行组合)。
  • 专门关系运算:
    • 选择 σ:按条件选取满足条件的行(横向筛选),如 σ 年龄>18 (学生)。
    • 投影 π:选取指定的列并去重(纵向筛选),如 π 姓名,年龄 (学生)。
    • 连接 ⋈:把两表按一定条件拼接,最常用的是自然连接(按同名属性等值匹配并去重列)。

5SQL 语言

结构化查询语言(Structured Query Language,SQL)是关系数据库的标准语言(ANSI/ISO 标准), 集数据定义、操纵、查询、控制功能于一体,高度非过程化——只需说明"要什么",不必说明"怎么取"。

5.1 SQL 的四大组成

分类命令功能
DDL 数据定义语言CREATE / ALTER / DROP建库、建表、改表、删表
DML 数据操纵语言INSERT / UPDATE / DELETE插入、修改、删除数据
DQL 数据查询语言SELECT检索查询(最核心、最常用)
DCL 数据控制语言GRANT / REVOKE授权与收权;还有事务控制 COMMIT/ROLLBACK

5.2 常用 SQL 语句示例

-- ① 建表(DDL)
CREATE TABLE Student (
    sno   CHAR(7) PRIMARY KEY,          -- 学号,主码
    sname VARCHAR(20) NOT NULL,       -- 姓名,非空约束
    age   INT CHECK(age > 0),
    dept  VARCHAR(30)
);

-- ② 插入、修改、删除(DML)
INSERT INTO Student VALUES('2026001', '张三', 19, '计算机系');
UPDATE Student SET age = 20 WHERE sno = '2026001';
DELETE FROM Student WHERE sno = '2026001';

-- ③ 查询(DQL):查计算机系年龄大于18的学生姓名
SELECT sname, age
FROM   Student
WHERE  dept = '计算机系' AND age > 18
ORDER BY age DESC;             -- 按年龄降序

-- 分组聚合:统计各系学生人数
SELECT dept, COUNT(*) AS cnt
FROM   Student
GROUP BY dept
HAVING COUNT(*) > 50;          -- 对分组结果筛选

查询的执行逻辑可理解为:FROM 确定数据源 → WHERE 行筛选 → GROUP BY 分组 → HAVING 组筛选 → SELECT 选列 → ORDER BY 排序。 多表查询通过连接查询(JOIN)或嵌套子查询实现。

6数据库设计与规范化

6.1 数据库设计的六个阶段

  1. 需求分析:调查用户要存储什么数据、做什么处理,产出数据字典、数据流图(DFD)。
  2. 概念结构设计:建立独立于 DBMS 的 E-R 模型(设计的关键阶段)。
  3. 逻辑结构设计:把 E-R 图转换为关系模式,并进行优化(规范化)。
  4. 物理结构设计:选择存储结构、建立索引、确定存放位置。
  5. 数据库实施:建库建表、录入数据、编写调试应用程序。
  6. 数据库运行与维护:由 DBA 负责安全性、完整性监督、性能调整、备份恢复。

6.2 规范化与范式

设计关系模式时若把太多信息塞进一张表,会引发数据冗余、插入异常、删除异常、修改异常。 规范化理论用"范式"衡量关系模式的好坏,核心工具是函数依赖(若知道 X 的值就能唯一确定 Y 的值,则 Y 函数依赖于 X,记作 X→Y)。

范式要求消除的问题
第一范式 1NF每个属性都是不可再分的原子项(表中不能套表)属性原子性
第二范式 2NF在 1NF 基础上,消除非主属性对主码的部分函数依赖(非主属性须完全依赖整个主码)部分依赖导致的冗余
第三范式 3NF在 2NF 基础上,消除非主属性对主码的传递函数依赖传递依赖(实际工程中通常要求达到 3NF)

方法:"一事一表"——把不同主题的信息拆分到不同表,用外码关联。 例如"学生(学号,姓名,系名,系主任)"存在传递依赖(学号→系名→系主任),应拆成"学生表"和"系表"。范式并非越高越好,过度拆分会增加连接开销,有时为性能故意保留冗余(反规范化)。

7事务与并发控制

7.1 事务的 ACID 特性

事务(Transaction):用户定义的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位(如转账:扣款和加款必须同时成功或同时失败)。
特性含义
原子性 A事务是不可分割的最小单位,全做或全不做(失败则 ROLLBACK 回滚)
一致性 C事务执行前后数据库从一个正确状态变为另一个正确状态(总额守恒)
隔离性 I并发事务之间互不干扰,一个事务的中间结果对其他事务不可见
持续性 D事务一旦提交(COMMIT),对数据的改变永久有效,即使系统故障也不丢失

7.2 并发操作带来的问题

  • 丢失修改:两个事务同时修改同一数据,一个的修改被另一个覆盖。
  • 读"脏"数据:事务 A 读到了事务 B 修改后尚未提交又被撤销的数据。
  • 不可重复读:事务 A 两次读取同一数据期间,事务 B 修改并提交,导致两次结果不一致。

7.3 封锁技术

  • 排他锁(X 锁/写锁):事务对数据加 X 锁后只许自己读写,其他事务不能再加任何锁。
  • 共享锁(S 锁/读锁):加 S 锁后自己可读不能写,其他事务可再加 S 锁但不能加 X 锁。
  • 两段锁协议(2PL):事务分为"加锁阶段"和"解锁阶段",可保证并发调度的可串行化;但封锁可能引发死锁,需预防或检测解除。

SQL 标准还定义了读未提交、读已提交、可重复读、串行化四种隔离级别,在一致性与并发性能之间权衡。

8数据库安全与恢复

8.1 安全性控制

数据库安全指保护数据防止不合法使用造成的泄露、篡改和破坏。常用措施:

  1. 用户标识与鉴别:用户名/口令、动态验证码、生物特征认证。
  2. 存取控制:通过 GRANT/REVOKE 定义不同用户对不同对象的操作权限(最小权限原则)。
  3. 视图机制:为不同用户定义视图,把要保密的数据对无权用户隐藏。
  4. 审计:记录用户操作日志,便于事后追溯。
  5. 数据加密:传输加密(SSL/TLS)与存储加密,防止介质失窃泄密。

8.2 数据库恢复

故障不可避免(事务内部错误、系统崩溃、介质损坏、病毒黑客),DBMS 必须能把数据库恢复到一致状态。关键技术:

  • 数据转储(备份):DBA 定期把数据库复制到磁带/云存储,分静态/动态、海量/增量备份。
  • 登记日志文件(Log):按时间顺序记录所有更新操作(改前值、改后值),遵循"先写日志,再写数据库"原则。
  • 恢复策略:对未完成事务执行 UNDO(撤销),对已提交但未写入的事务执行 REDO(重做)。
⚠️

备份不等于简单复制:要验证备份可成功恢复,并做到定期异地保存。对重要系统而言,"没有经过恢复演练的备份等于没有备份"。

9常见数据库产品与发展趋势

9.1 主流关系数据库

产品特点与适用场景
Oracle商业数据库龙头,功能强大、高可用,用于金融、电信等大型核心系统
MySQL开源轻量、生态成熟,Web 应用最广泛(被 Oracle 拥有),学习入门首选
PostgreSQL开源、功能丰富、标准兼容好,支持复杂查询与扩展,近年增长迅速
SQL Server微软产品,与 .NET/Windows 生态集成好,企业市场常见
SQLite零配置、嵌入式单文件数据库,用于手机 App、浏览器、小型工具
国产数据库达梦 DM、人大金仓 Kingbase、openGauss(华为开源)等,信创领域快速发展

9.2 NoSQL 与新型数据管理技术

面对互联网海量、高并发、数据类型多样的挑战,出现了不严格遵循关系模型的 NoSQL 数据库:

  • 键值型:Redis(缓存、会话);文档型:MongoDB(存 JSON 文档,灵活 schema)。
  • 列族型:HBase、Cassandra(海量数据分布式存储);图数据库:Neo4j(社交关系、知识图谱)。
  • NewSQL:兼具关系模型与水平扩展能力,如 TiDB、OceanBase。
  • 数据仓库:面向分析(OLAP),从各业务库抽取整合历史数据支持决策,如 Hive、ClickHouse;与之相对的联机事务处理称 OLTP。
  • 大数据平台、数据湖:与下一章"新技术"中的 Hadoop/Spark 紧密相关。
🔑

本章小结:DBMS 在操作系统之上统一管理结构化数据;现实世界经 E-R 概念建模后转换为关系(二维表),用主码、外码与三类完整性保证数据正确;SQL 一句 SELECT 融合选择、投影、连接等关系代数运算;规范化(1NF→2NF→3NF)消除冗余与异常;事务的 ACID 靠日志、封锁和恢复技术保障。下一章学习如何用软件工程的方法把这些技术组织成可靠的大型软件。