# 数据库概念

> CIE A-Level 计算机科学 · 9618
> 来源: https://www.owlsprep.com/zh/study/cie-9618-u8-database-concepts/

本小节介绍CIE A-Level计算机科学中所有数据库相关内容的核心基础概念。我们将讲解关键术语，比较常见数据库模型，解释不良设计带来的问题，并概述数据库管理系统的作用。

**先修:** 对数据存储和文件系统有基础了解

## 学习目标

- 定义包含实体、属性和关系的数据库核心术语
- 区分平面文件数据库模型和关系型数据库模型
- 解释数据冗余和数据不一致的影响
- 概述数据库管理系统（DBMS）的核心功能

## 数据库核心术语

**实体** — 我们希望在数据库中存储相关数据的、可明确识别的对象或概念

*例:* 常见例子包括学生、书籍、订单和商品

所有实体都有我们记录的特征，称为属性。每个属性存储实体的一条数据。关系描述两个或多个实体之间的连接方式。

**例题:** 请识别存储书籍和借阅者数据的图书馆数据库中的实体、属性和一个关系

1. 首先，识别数据库存储数据的不同对象：
2. 两个明确的实体是：1. 书籍 2. 借阅者
3. 接下来，列出每个实体的属性：
4. 书籍的属性：`book_id`、书名、作者、出版年份、是否可借。借阅者的属性：`borrower_id`、姓名、联系电话、注册日期。
5. 最后，识别实体之间的关系：
6. 一个关系是：一名借阅者可以借阅多本书，而一本书同一时间只能被一名借阅者借阅。

> **考试提示:** 考试答题时务必将实体命名为名词（而非动词），避免丢分

## 平面文件数据库 vs 关系型数据库

CIE 9618考察的两种核心数据库结构是平面文件数据库和关系型数据库。平面文件数据库将所有数据存储在单个表或文件中，而关系型数据库将数据拆分存储在多个相互关联的表中，每个主要实体对应一个表。

**平面文件数据库** — 将所有数据存储在单个表或非结构化文件中，不拆分相关数据实体的数据库结构

*例:* 同时存储学生信息和课程注册数据的单个CSV文件就是平面文件数据库

> **info**
>
> 平面文件数据库对于小型数据集来说实现简单，但当扩展到多用户或大容量数据场景时，会存在严重的设计问题。

**例题:** 请解释将所有学生和课程数据存储在单个平面文件表中的一个主要问题

1. 首先可以发现，相同的课程信息（例如课程名称、授课教师姓名）会为每一名选修该课程的学生重复存储一次。
2. 这就产生了数据冗余：相同信息被多次存储，浪费存储空间。
3. 这还会带来数据不一致的风险：如果课程名称变更，你需要更新每一行的数据，很容易遗漏某些行，最终产生冲突数据。
4. 关系型数据库通过将数据拆分为两个关联表解决这个问题：一个表存储学生，一个表存储课程。

## 数据冗余与数据一致性

CIE数据库题目中最常考察的两个概念就是冗余和一致性。不良的数据库设计几乎总会同时引发这两个问题，并且两者经常出现在定义问答题中。

**数据冗余** — 同一数据在数据库多个位置不必要的重复存储

*例:* 为客户的每一个订单都存储一次相同的客户地址

数据一致性指数据库中同一数据的所有副本都相互匹配。当数据更新时，所有实例都必须更新才能保持一致性。数据冗余让维护一致性变得困难得多，因为需要多次更新而非一次更新。

**例题:** 一家零售店将客户订单数据存储在平面文件中，每一行都包含完整的客户地址。客户搬家后变更了地址，请解释这里的数据冗余如何导致数据不一致。

1. 客户地址会为客户的每一笔订单存储一次，因此被冗余重复存储。
2. 如果更新地址的工作人员只修改了最近订单行的地址，所有更早的订单行仍然保留旧地址。
3. 这就产生了不一致：数据库为同一客户存储了两个不同的地址。
4. 在设计良好的关系型数据库中，地址只在客户表中存储一次，因此只需要更新一次，消除了不一致的风险。

> **考试提示:** 当题目要求区分这两个术语时：冗余是重复数据，不一致是冲突数据。冗余导致不一致

## 数据库管理系统（DBMS）的作用

DBMS是管理数据库访问、组织和安全的软件，它充当终端用户、应用程序和底层数据库文件之间的接口。

**数据库管理系统（DBMS）** — 为数据库的创建、修改、查询和安全保护提供工具，同时管理用户和存储数据之间交互的软件

*例:* 常见例子包括MySQL、PostgreSQL、Microsoft Access和Oracle

- 提供数据定义语言（DDL）来创建和修改数据库结构
- 提供数据操作语言（DML）来查询和更新数据
- 管理多用户并发访问，防止修改冲突
- 对敏感数据实施访问控制和安全规则
- 创建备份并在系统故障后恢复数据
- 实施数据完整性约束，确保存储数据有效

**例题:** 请描述DBMS提升医院患者数据库安全性的一种方式

1. DBMS允许管理员为不同用户组设置细粒度的访问权限。
2. 例如，前台接待可以访问患者的联系方式，但不能访问完整的保密病史。
3. 主治医生可以访问患者的所有数据，而行政收费人员只能访问和支付相关的信息。
4. 这种强制访问控制防止了敏感数据的未授权访问，这在无管理的平面文件中无法可靠实现。

## 常见错误

- **错误做法:** 混淆实体和属性：将'学生姓名'称为实体而非属性
  - 原因: 实体是我们存储数据的对象，而属性是这些对象的特征
  - 正确做法: 检查方法：如果你需要为它存储多个条目，它就是实体。如果它是该事物的一个特征，它就是属性
- **错误做法:** 主张所有平面文件数据库在所有使用场景下都不好
  - 原因: CIE考官会考察你是否知道平面文件适用于小型简单数据集
  - 正确做法: 承认平面文件对于小型场景来说简单、开销低，但对于大型多用户数据集存在严重问题
- **错误做法:** 混淆数据冗余和数据不一致
  - 原因: 这两个概念相关但不同，考试题目经常要求分别给出定义
  - 正确做法: 记住：冗余 = 不必要的重复数据。不一致 = 同一数据的冲突版本。冗余导致不一致
- **错误做法:** 将DBMS和数据库本身混淆
  - 原因: 很多考生混淆了软件和存储的数据
  - 正确做法: 数据库是存储数据的集合。DBMS是管理数据库的软件
- **错误做法:** 在模式图中在属性之间而非实体之间绘制关系
  - 原因: 关系是整个实体之间的关联，不是单个属性之间的关联
  - 正确做法: 在实体关系图中始终连接实体，而非单个属性

## 速查表

| 概念 | 核心定义 |
| --- | --- |
| 实体 | 需要存储数据的可识别对象/概念 |
| 属性 | 实体的特征，存储单个数据项 |
| 关系 | 两个或多个实体之间的关联 |
| 平面文件数据库 | 所有数据存储在单个表/文件中 |
| 关系型数据库 | 数据拆分存储在多个关联的实体表中 |
| 数据冗余 | 不必要的数据重复 |
| 数据不一致 | 同一数据存在冲突版本 |
| DBMS | 管理数据库访问和结构的软件 |

## 下一步

现在你已经理解了数据库的核心基础概念，接下来可以在此基础上学习更高级的数据库设计和管理主题。理解这些基础对于后续所有数据库相关内容（从实体关系图到SQL查询编写）都至关重要。几乎所有CIE 9618的数据库考题都建立在这些核心术语和概念之上，你在识别设计问题、规范化数据库、编写查询从结构化数据中提取有效信息时都会用到这些知识。

- [关系数据库模型](https://www.owlsprep.com/zh/study/cie-9618-u8-relational-database-model/)
- [结构化查询语言（SQL）](https://www.owlsprep.com/zh/study/cie-9618-u8-structured-query-language/)
- [规范化](https://www.owlsprep.com/zh/study/cie-9618-u8-normalisation/)

---

来自 [OwlsPrep](https://www.owlsprep.com) —— A-Level / IB / AP / IGCSE 免费学习指南，依据官方考纲编写。原页面：https://www.owlsprep.com/zh/study/cie-9618-u8-database-concepts/
