欢迎来到数据库的世界!
在本章中,我们将探讨计算机如何存储和组织海量的资讯。你可以把数据库想象成你最爱的应用程序背后的“大脑”。无论是 Spotify 记录数百万首歌曲,还是学校管理学生的个人资料,它们都使用数据库来让数据井然有序且方便搜索。读完这些笔记,你就能像专家一样设计、建立和管理这些数字文档柜!
1. 基础概念:平面文件与关系型数据库
在进入进阶内容前,我们需要先了解数据存储的两种主要方式。
平面文件数据库 (Flat File Databases)
试想象一个巨大的电子表格,把所有东西都塞进同一个表格里。这就是平面文件数据库。虽然对于小型清单(例如购物清单)来说很简单,但对于大型项目而言,这简直是一场噩梦,因为你会不断地重复输入相同的资讯。这被称为数据冗余 (Data Redundancy)。
关系型数据库 (Relational Databases)
这是现代计算机运算中的黄金标准。关系型数据库不使用单一的大表格,而是将数据拆分成几个较小的表格并互相链接。 例子:与其每次客户购买 DVD 时都写下他们的地址,你只需要建立一个“客户”表格和一个“订单”表格,然后使用唯一的 ID 将它们链接起来即可。
2. 键值 (Keys):数据库的“身份证”
为了保持一切井然有序且互相链接,我们使用不同类型的键值 (Keys):
- 主键 (Primary Key):表格中每条记录的唯一标识符。就像你的身份证号码或指纹一样,没有两个人会有一样的号码!
- 外键 (Foreign Key):这是来自另一个表格的主键,出现在目前的表格中,用来建立两个表格之间的链接(关系)。
- 次要键 (Secondary Key):也称为“索引”。这是用来快速搜索数据的字段。 例子:你可能会使用“姓氏”作为次要键,因为虽然它不是唯一的,但这是人们搜索数据时最常用的方式。
快速回顾:关系型数据库利用主键和外键来链接表格,从而避免混乱且重复的数据。
3. 实体关系模型 (ER Modelling)
在建立数据库之前,你需要一张地图。这就是实体关系图 (ERD)。我们查看“实体”(我们要存储数据的事物)以及它们之间如何互动。
主要的关系类型有三种:
- 一对一 (One-to-One):一位丈夫对应一位妻子(通常是这样!)。
- 一对多 (One-to-Many):一位母亲可以有多个孩子。(这是数据库中最常见的类型)。
- 多对多 (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):在不同系统之间移动数据。常见的格式有 JSON 和 XML,因为它们容易被不同类型的计算机读取。
7. 事务 (Transactions) 与 ACID
事务是数据库中的单一操作。试想一下将钱从你的银行账户转账给朋友。你需要确保钱从你账户扣除的同时,也存入了对方的账户。如果只发生了一半,那简直是一场灾难!
为了确保事务安全,我们使用 ACID 规则:
- 原子性 (Atomicity):事务必须是“全有或全无”。如果任何部分失败,整个过程都会被取消。
- 一致性 (Consistency):数据库必须遵守所有规则(例如:如果规则禁止,你的银行账户余额不能为负数)。
- 隔离性 (Isolation):如果两个人同时尝试更新同一笔记录,这些事务必须一个接一个地处理,而不是同时进行。
- 持久性 (Durability):一旦变更完成,它就是永久的,即使随后立刻断电也不会改变。
记录锁定 (Record Locking)
为了协助达成隔离性,数据库使用记录锁定。如果你正在编辑一笔记录,数据库会将其“锁定”,这样在完成之前,没有人能进行修改。这能防止数据被覆盖或损坏。
你知道吗?如果没有记录锁定,两个人可能会同时预订飞机上的同一个座位!
8. 参照完整性 (Referential Integrity)
这是一个简单但至关重要的概念。参照完整性确保你不会有“悬空”的链接。如果“学生”表格中有名为外键的字段指向“班级”ID,那么该班级必须确实存在于“班级”表格中。如果有学生被分配到某个班级,你就不可以删除该班级!
快速回顾箱
- 平面文件 (Flat File):单一表格。
- 关系型 (Relational):多个链接的表格。
- 主键 (Primary Key):唯一标识 ID。
- SQL:用于查询数据的语言。
- ACID:保持事务安全的规则。
- 规范化 (Normalisation):将表格整理至 3NF 的过程。
如果规范化起初看起来像拼图一样令人困惑,请别担心——多练习几个表格,你很快就能看出规律!你一定做得到的!