欢迎来到数据库的世界!

在本章中,我们将探讨计算机如何存储和组织海量的资讯。你可以把数据库想象成你最爱的应用程序背后的“大脑”。无论是 Spotify 记录数百万首歌曲,还是学校管理学生的个人资料,它们都使用数据库来让数据井然有序且方便搜索。读完这些笔记,你就能像专家一样设计、建立和管理这些数字文档柜!

1. 基础概念:平面文件与关系型数据库

在进入进阶内容前,我们需要先了解数据存储的两种主要方式。

平面文件数据库 (Flat File Databases)

试想象一个巨大的电子表格,把所有东西都塞进同一个表格里。这就是平面文件数据库。虽然对于小型清单(例如购物清单)来说很简单,但对于大型项目而言,这简直是一场噩梦,因为你会不断地重复输入相同的资讯。这被称为数据冗余 (Data Redundancy)

关系型数据库 (Relational Databases)

这是现代计算机运算中的黄金标准。关系型数据库不使用单一的大表格,而是将数据拆分成几个较小的表格并互相链接。 例子:与其每次客户购买 DVD 时都写下他们的地址,你只需要建立一个“客户”表格和一个“订单”表格,然后使用唯一的 ID 将它们链接起来即可。

2. 键值 (Keys):数据库的“身份证”

为了保持一切井然有序且互相链接,我们使用不同类型的键值 (Keys)

  • 主键 (Primary Key):表格中每条记录的唯一标识符。就像你的身份证号码或指纹一样,没有两个人会有一样的号码!
  • 外键 (Foreign Key):这是来自另一个表格的主键,出现在目前的表格中,用来建立两个表格之间的链接(关系)。
  • 次要键 (Secondary Key):也称为“索引”。这是用来快速搜索数据的字段。 例子:你可能会使用“姓氏”作为次要键,因为虽然它不是唯一的,但这是人们搜索数据时最常用的方式。

快速回顾:关系型数据库利用主键外键来链接表格,从而避免混乱且重复的数据。

3. 实体关系模型 (ER Modelling)

在建立数据库之前,你需要一张地图。这就是实体关系图 (ERD)。我们查看“实体”(我们要存储数据的事物)以及它们之间如何互动。

主要的关系类型有三种:

  1. 一对一 (One-to-One):一位丈夫对应一位妻子(通常是这样!)。
  2. 一对多 (One-to-Many):一位母亲可以有多个孩子。(这是数据库中最常见的类型)。
  3. 多对多 (Many-to-Many):多名学生修读多个科目。(注意:在数据库中,我们通常需要使用一个“链接表格”将其拆解为两个一对多的关系)。

4. 规范化 (Normalisation):数据的“整理”过程

规范化只是一个让数据库更有效率的专业术语。我们进行规范化是为了消除冗余(重复的数据)并确保数据完整性(确保数据准确无误)。

如果觉得这很难,别担心!只要记住这句著名的助记词,代表三个规范化阶段(Normal Forms):
"The Key, The Whole Key, and Nothing but the Key."(键值、完整键值、且只有键值。)

第一规范化 (1NF)

如果一个表格没有重复的数据组,且每项数据都是“原子的”(拆解到最小单位),该表格就符合 1NF。 例子:你不会把“陈大文”放在同一个格子里;你应该有“名字”字段和“姓氏”字段。

第二规范化 (2NF)

该表格必须先符合 1NF。要达到 2NF,必须消除局部依赖 (Partial Dependencies)。这意味着每个字段都必须依赖于完整的主键。这通常应用在有“复合键”(由两个字段组成的特殊主键)的情况下。

第三规范化 (3NF)

该表格必须符合 2NF。要达到 3NF,你必须消除传递依赖 (Transitive Dependencies)。这意味着没有任何字段应该依赖于主键以外的其他字段。 “只有键值!”

重点总结:规范化能让数据库体积更小、运行更快,并减少更新资讯时发生错误的机会。

5. 结构化查询语言 (SQL)

SQL 是我们与数据库沟通的语言。你需要学会阅读和撰写基本的指令:

  • SELECT:你想要哪些字段?
  • FROM:数据位于哪个表格?
  • WHERE:搜索条件是什么?(例如:价格 > 10)
  • ORDER BY:你想要按字母顺序还是数字顺序排序?
  • JOIN:使用键值链接两个表格。

查询范例:
SELECT Title, Author
FROM Books
WHERE Genre = 'Sci-Fi'
ORDER BY Title ASC

6. 数据管理:获取、选择与交换

数据实际上是如何进出系统的呢?

  • 获取 (Capturing):将数据导入数据库。这可以通过网上表格、条码扫描器或 OCR(光学字符识别)来完成。
  • 选择 (Selecting):选取你需要的特定数据(通常使用 SQL)。
  • 管理 (Managing):保持数据更新、安全并定期备份。
  • 交换 (Exchanging):在不同系统之间移动数据。常见的格式有 JSONXML,因为它们容易被不同类型的计算机读取。

7. 事务 (Transactions) 与 ACID

事务是数据库中的单一操作。试想一下将钱从你的银行账户转账给朋友。你需要确保钱从你账户扣除的同时,也存入了对方的账户。如果只发生了一半,那简直是一场灾难!

为了确保事务安全,我们使用 ACID 规则:

  • 原子性 (Atomicity):事务必须是“全有或全无”。如果任何部分失败,整个过程都会被取消。
  • 一致性 (Consistency):数据库必须遵守所有规则(例如:如果规则禁止,你的银行账户余额不能为负数)。
  • 隔离性 (Isolation):如果两个人同时尝试更新同一笔记录,这些事务必须一个接一个地处理,而不是同时进行。
  • 持久性 (Durability):一旦变更完成,它就是永久的,即使随后立刻断电也不会改变。

记录锁定 (Record Locking)

为了协助达成隔离性,数据库使用记录锁定。如果你正在编辑一笔记录,数据库会将其“锁定”,这样在完成之前,没有人能进行修改。这能防止数据被覆盖或损坏。

你知道吗?如果没有记录锁定,两个人可能会同时预订飞机上的同一个座位!

8. 参照完整性 (Referential Integrity)

这是一个简单但至关重要的概念。参照完整性确保你不会有“悬空”的链接。如果“学生”表格中有名为外键的字段指向“班级”ID,那么该班级必须确实存在于“班级”表格中。如果有学生被分配到某个班级,你就不可以删除该班级!

快速回顾箱

- 平面文件 (Flat File):单一表格。
- 关系型 (Relational):多个链接的表格。
- 主键 (Primary Key):唯一标识 ID。
- SQL:用于查询数据的语言。
- ACID:保持事务安全的规则。
- 规范化 (Normalisation):将表格整理至 3NF 的过程。

如果规范化起初看起来像拼图一样令人困惑,请别担心——多练习几个表格,你很快就能看出规律!你一定做得到的!