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 的主要特点
-
数据共享性好,冗余度低
- 用统一的数据模型和存储结构管理数据;
- 多个应用可以共享同一份数据,避免重复存储。
-
数据与程序相对独立
- 逻辑独立性:应用程序依赖逻辑模式,而不是底层文件;
- 物理独立性:修改存储结构或存储路径,对上层应用透明。
-
统一的数据视图与抽象接口
- 通过 SQL / API 等方式访问数据;
- 用户可以只看到自己关心的视图,而无需了解完整结构。
-
丰富的保护机制
- 并发控制(锁、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) 用来减少冗余、避免更新异常,常见范式包括:
- 第一范式 (1NF):字段具有原子性,不可再分;
- 第二范式 (2NF):在满足 1NF 的基础上,非主属性完全依赖于主键;
- 第三范式 (3NF):在满足 2NF 的基础上,非主属性不传递依赖于主键。
在实践中:
- 业务系统通常做到 3NF 即可满足大多数需求;
- 为提高查询性能,有时会适当“反规范化”,引入冗余字段或汇总表。
1.4.4 SQL 与关系型数据库
- SQL (Structured Query Language) 是关系型数据库的通用语言;
- 主要分为:
- DDL:数据定义语言,如
CREATE/ALTER/DROP; - DML:数据操作语言,如
INSERT/UPDATE/DELETE; - DQL:数据查询语言,如
SELECT; - DCL / TCL:权限控制与事务控制;
- DDL:数据定义语言,如
- 各种关系型数据库都以 SQL 为基础,结合自身扩展,构成完整的数据库平台。
以上内容为后续章节(SQL 语言、SQL 高阶语法、用户管理等)奠定了概念基础。