欢迎来到数据库的世界!
在本章中,我们将探索计算机如何存储和管理海量的信息。无论是你最喜欢的流媒体平台如何追踪你的播放列表,还是学校如何管理数千名学生的记录,数据库(Databases)都是背后的核心引擎。看完这些笔记后,你将学会如何有效地组织数据,以及如何使用代码与数据库进行“对话”!
8.1 数据库概念
在现代数据库出现之前,人们使用文件系统(File-based approach)。想象一下如果你手上有几十个独立的电子表格或文本文件,这会导致严重的问题:
• 数据冗余(Data Redundancy): 同一份数据被存储在多个地方(例如:你的地址同时出现在“图书馆”文件和“学费”文件中)。
• 数据不一致(Data Inconsistency): 如果你搬家了却只更新其中一个文件,这些文件之间的数据就会产生冲突!
• 数据依赖(Data Dependency): 数据与创建它的特定软件紧密绑定。
关系型数据库解决方案:
关系型数据库(Relational Database)通过将数据组织成相互链接的表格来解决这些问题。这不仅减少了冗余,还确保了数据的准确性(即数据完整性,Data Integrity)。
关键术语(数据库的语言)
别担心,如果这些术语起初看起来很生硬,它们其实只是你已知事物的不同称呼而已!
• 实体(Entity): 用来存储数据的对象或概念(例如:学生、书籍、课程)。你可以把它想象成数据表的“标题”。
• 数据表(Table): 存储特定实体所有数据的地方。
• 字段/属性(Field / Attribute): 实体的特征(例如:学生姓名、出生日期)。这些就是数据表中的列(columns)。
• 记录/元组(Record / Tuple): 一组关于特定个体的字段信息(例如:关于某一位特定学生的所有信息)。这些就是数据表中的行(rows)。
• 主键(Primary Key): 每一条记录的唯一标识符。就像你的身份证号码一样,没有两个人可以拥有相同的号码!
• 候选键(Candidate Key): 任何因为具有唯一性,而“有可能”成为主键的字段。
• 外键(Foreign Key): 出现在另一个数据表中,用来链接两个数据表的主键。
• 次键(Secondary Key): 经过索引处理的字段,用来加快搜索速度(例如:以姓氏而非学号进行搜索)。
实体关系图(E-R Diagrams)
我们使用 E-R 图来可视化数据表之间的链接。其中最重要的是关系(Relationship):
• 一对一(1:1): 一个丈夫拥有一位妻子(在大多数系统中!)。
• 一对多(1:M): 一位母亲可以拥有多个孩子。
• 多对多(M:M): 多个学生选修多门科目。
小贴士: 在关系型数据库中,我们无法直接处理多对多关系。我们通常会使用第三个“链接”数据表,将其拆解为两个一对多关系!
规范化过程(Normalisation)
规范化只是一个听起来很高级的词,意指“组织你的数据以避免混乱”。我们分三个步骤来完成:
1. 第一范式(1NF):
如果数据表中没有重复的数据组,且所有属性都是原子的(Atomic)(意即每个单元格只包含一个数据,不可再分——不能是列表!),该表即符合 1NF。
2. 第二范式(2NF):
首先必须符合 1NF。接着,每个非主键字段必须完全依赖于整个主键。只有当你拥有“复合键”(由两个字段组成的唯一主键)时,这一点才重要。
3. 第三范式(3NF):
必须符合 2NF。此外,不能有传递依赖(Transitive dependencies)。这意味着一个非主键字段不能依赖于另一个非主键字段。
例子:如果“社团会费”依赖于“社团名称”,但“社团名称”不是主键,你需要把它们移到一个独立的数据表中!
重点总结: 规范化能提升数据库效率,减少重复数据,并确保当你在一个地方修改数据时,整体数据保持一致。
8.2 数据库管理系统(DBMS)
DBMS 是位于用户与数据之间的软件。把它想象成一位图书管理员:你向管理员借书,他们知道书在哪里,并且知道如何安全地获取它。
DBMS 的功能:
• 数据字典(Data Dictionary): 存储“元数据”(关于数据的数据)的文件,例如数据表名称、字段类型和关联关系。
• 数据管理(Data Management): 处理数据在磁盘上的实际存储方式。
• 数据完整性(Data Integrity): 确保规则被遵守(例如:如果学生还未归还图书馆的书,你就不能删除该学生的资料)。
• 数据安全性(Data Security): 管理谁可以查看或编辑数据库的哪些部分(访问权限)。
• 查询处理器(Query Processor): 理解你的 SQL 指令并找到对应数据的部分。
DBMS 中的软件工具:
• 开发者接口(Developer Interface): 允许程序员轻松创建数据表和表单。
• 逻辑模式(Logical Schema): 整个数据库设计的总体视图。
重点总结: DBMS 处理了安全与组织的“繁重工作”,让用户不必担心存储的技术细节。
8.3 结构化查询语言(SQL)
SQL 是与数据库沟通的标准语言,主要分为两大部分:
1. 数据定义语言(DDL)
用于创建或更改数据库的结构。
• CREATE DATABASE: 创建一个新的数据库文件。
• CREATE TABLE: 定义一个新数据表及其字段。
例子:
CREATE TABLE Students (
StudentID INTEGER PRIMARY KEY,
FirstName VARCHAR(20),
DateOfBirth DATE
);
• ALTER TABLE: 用于在现有数据表中新增或删除字段。
2. 数据操纵语言(DML)
用于管理数据表内部的数据。
• SELECT: 最常用的指令,用于提取数据。
• INSERT INTO: 新增一行数据。
• UPDATE: 修改现有的数据。
• DELETE FROM: 移除数据。
编写 SELECT 查询
把 SELECT 查询想成一个过滤器。其基本结构为:
SELECT [字段] FROM [数据表] WHERE [条件] ORDER BY [字段];
例子:找出所有 12 年级的学生,并按姓名排序:
SELECT FirstName, LastName
FROM Students
WHERE YearGroup = 12
ORDER BY LastName ASC;
连接(Joins)与聚合函数(Aggregates)
• INNER JOIN: 用于结合两个数据表,前提是它们有相符的字段(通常为主键与外键)。
• SUM, COUNT, AVG: 这些是“聚合”函数,用于对数据进行数学运算。
例子: SELECT COUNT(*) FROM Students; (这会计算数据表中有多少名学生)。
快速回顾:
• DDL = 创建“水桶”(结构)。
• DML = 管理水桶里的“水”(数据)。
• 使用 WHERE 来过滤结果。
• 使用 INNER JOIN 来连接数据表。
你知道吗? SQL 是当今就业市场中最热门的技能之一。掌握它,你就已经领先群雄了!
最终总结
数据库远比简单的文件强大。通过使用关系模型,我们能让数据保持组织与安全。规范化保持了数据表的整洁,DBMS 确保了数据安全,而 SQL 让我们能在瞬间找到所需的信息。不用担心 SQL 语法一开始看起来很挑剔——计算机是非常讲求字面意义的!只要记住“Select-From-Where”的模式,很快你就会成为数据库专家。