跳到主要内容

1 数据库原理

本节介绍数据库相关的基础概念,包括数据的类型、数据管理方式的演进、 数据库管理系统 (DBMS) 的作用,以及关系型数据库的核心思想。


1.1 数据的分类

从结构化程度的角度,可以把数据大致分为三类:

1. 结构化数据

  • 固定的模式 (Schema),字段和类型在设计之初就确定。
  • 二维表 的形式存储最为典型,例如:
    • 关系型数据库中的表:学生表、订单表等;
    • 每一行记录 (Row) 具有相同的列 (Column) 结构。
  • 优点:
    • 易于用 SQL 等语言进行查询、统计和约束;
    • 便于建立索引、事务、一致性校验等能力。
  • 典型存储介质:各类关系型数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 等。

2. 半结构化数据

  • 介于“有固定模式”和“完全无结构”之间;
  • 数据本身携带了部分结构信息(标签、键值等),但不强制统一模式;
  • 常见形式:
    • JSON 文档;
    • XML / HTML;
    • YAML / TOML 等配置文件;
    • 某些 NoSQL 文档型数据库中的记录。
  • 特点:
    • 结构和内容混合在一起,自描述性强;
    • 模式可以随数据逐步演化,灵活性高;
    • 通常通过程序或查询引擎在读取时进行解析。

3. 非结构化数据

  • 没有固定结构,难以用二维表直接描述;
  • 例如:
    • 图片、音视频文件;
    • 办公文档、PDF、邮件正文;
    • 传感器原始日志、地理位置信息、语音流等。
  • 一般做“整体存储 + 外挂元数据”,常见做法:
    • 文件统一存储在对象存储 / 文件系统中;
    • 利用数据库记录文件的路径、类型、标签、业务含义等元信息。

1.2 数据管理发展历史

随着计算机与存储设备的发展,数据管理方式经历了三个阶段:

1. 人工管理阶段

  • 时间:20 世纪 50 年代中期之前;
  • 介质:纸质文档、打孔卡片、磁带等;
  • 特点:
    • 数据与程序完全分离,主要靠人工登记和查找;
    • 没有统一的数据结构和接口,数据共享性差、冗余严重;
    • 容易出错且难以维护。

2. 文件系统管理阶段

  • 时间:20 世纪 50 年代后期 ~ 60 年代中期;
  • 介质:磁带、磁鼓、磁盘等可随机访问的存储设备;
  • 做法:
    • 操作系统的文件系统来保存数据;
    • 程序通过文件读写接口访问数据。
  • 优点:
    • 数据可以长期保存,格式更加多样;
    • 支持批处理与联机处理;
  • 局限:
    • 每个应用都要自己设计文件结构,程序与数据强耦合
    • 缺乏统一的数据视图,无法方便地共享、并发访问与统一备份;
    • 数据冗余和不一致问题突出。

3. 数据库系统阶段

  • 时间:20 世纪 60 年代后期至今;
  • 在大容量磁盘、操作系统、多用户分时系统等技术基础上出现;
  • 引入 数据库管理系统 (DBMS) 的概念:
    • 由专门的软件负责数据的定义、存储、查询与安全控制;
    • 应用通过统一的接口(SQL 等)访问数据,而无需关心底层文件结构;
  • 优点:
    • 数据冗余显著降低,数据一致性更好;
    • 支持并发访问、事务、备份恢复、安全控制;
    • 数据与应用解耦,业务演进更灵活。

1.3 数据库管理系统 (DBMS)

1.3.1 基本概念

  • 数据库 (Database, DB):按一定结构组织、长期存储在计算机中的数据集合;
  • 数据库管理系统 (Database Management System, DBMS)
    • 用于建立、使用、维护数据库的软件系统;
    • 提供数据定义、查询、更新、权限控制、备份恢复等功能;
  • 数据库管理员 (Database Administrator, DBA)
    • 负责数据库规划、设计、实施、监控、调优与故障处理的专业人员;
    • 目标是保证数据库系统的 稳定性、安全性、完整性和高可用性

1.3.2 DBMS 的主要特点

  1. 数据共享性好,冗余度低

    • 用统一的数据模型和存储结构管理数据;
    • 多个应用可以共享同一份数据,避免重复存储。
  2. 数据与程序相对独立

    • 逻辑独立性:应用程序依赖逻辑模式,而不是底层文件;
    • 物理独立性:修改存储结构或存储路径,对上层应用透明。
  3. 统一的数据视图与抽象接口

    • 通过 SQL / API 等方式访问数据;
    • 用户可以只看到自己关心的视图,而无需了解完整结构。
  4. 丰富的保护机制

    • 并发控制(锁、MVCC 等),保证多用户同时读写的一致性;
    • 日志与恢复:崩溃后可以回放或回滚事务,避免数据丢失;
    • 完整性约束:主键、外键、唯一约束、检查约束等;
    • 安全控制:用户、角色、权限体系,记录访问审计。

1.4 关系型数据库理论

关系型数据库基于 关系模型 (Relational Model),核心是“表 + 约束”。

1.4.1 基本术语

  • 关系 (Relation):可以理解为一张二维表;
  • 行 (Row / Tuple):表中的一条记录;
  • 列 (Column / Attribute):记录的一个属性,也叫“字段”;
  • 主键 (Primary Key):可以唯一标识一条记录的字段或字段组合;
  • 候选键 / 唯一键 (Unique Key):具有唯一性约束的字段或组合;
  • 域 (Domain):某个属性允许取值的范围,例如性别只能是“男/女”。

1.4.2 E-R 模型与联系

在设计数据库时,通常先使用 E-R 模型 进行概念建模:

  • 实体 (Entity):业务对象,如“学生”“课程”“订单”;
  • 属性 (Attribute):实体的特征,如学生的姓名、性别、年龄;
  • 联系 (Relationship):实体之间的关联,例如:
    • 一对一(一名学生对应一张学生证);
    • 一对多(一个班级有多个学生);
    • 多对多(学生与课程之间的选课关系)。

通过将 E-R 模型映射为关系模型,可以得到数据库中的表结构:

  • 实体 → 实体表;
  • 实体之间的多对多联系 → 关联表(中间表)。

1.4.3 规范化与范式

规范化 (Normalization) 用来减少冗余、避免更新异常,常见范式包括:

  1. 第一范式 (1NF):字段具有原子性,不可再分;
  2. 第二范式 (2NF):在满足 1NF 的基础上,非主属性完全依赖于主键;
  3. 第三范式 (3NF):在满足 2NF 的基础上,非主属性不传递依赖于主键。

在实践中:

  • 业务系统通常做到 3NF 即可满足大多数需求;
  • 为提高查询性能,有时会适当“反规范化”,引入冗余字段或汇总表。

1.4.4 SQL 与关系型数据库

  • SQL (Structured Query Language) 是关系型数据库的通用语言;
  • 主要分为:
    • DDL:数据定义语言,如 CREATE / ALTER / DROP
    • DML:数据操作语言,如 INSERT / UPDATE / DELETE
    • DQL:数据查询语言,如 SELECT
    • DCL / TCL:权限控制与事务控制;
  • 各种关系型数据库都以 SQL 为基础,结合自身扩展,构成完整的数据库平台。

以上内容为后续章节(SQL 语言、SQL 高阶语法、用户管理等)奠定了概念基础。