数据库(Database)可以简单理解为一个 有组织地保存和管理数据的地方。我们每天使用的很多系统背后都有数据库:电商网站需要保存用户、商品和订单,学校系统需要保存学生、课程和成绩,公司内部系统则可能保存员工、客户、合同和财务信息。
如果只有几十条数据,我们当然可以把内容放在 Excel、CSV 或文本文件中。但当数据越来越多,或者需要让多个用户同时访问时,普通文件会很快遇到问题:查找速度变慢、修改容易出错,不同人还可能覆盖彼此的内容。数据库不只负责“保存”,还提供稳定、结构化的方式来组织、查询、修改和管理数据。
从一张用户表开始
在 关系型数据库(Relational Database) 中,数据通常保存在 表(Table) 里。表和 Excel 表格有一点相似,都是由行和列组成;不同之处在于,数据库表更强调清晰的结构,每一列通常都有固定含义和数据类型。
| id | name | |
|---|---|---|
| 1 | Alice | alice@example.com |
| 2 | Bob | bob@example.com |
| 3 | Chris | chris@example.com |
每一 列(Column) 表示一种固定的信息,例如 name 保存姓名,email 保存邮箱。每一 行(Row) 代表一条完整记录。上面突出显示的整行就是 Bob 这个用户,而不是三个互不相关的值。
可以这样记:Table 是一类数据的集合,Row 是其中的一条记录,Column 则规定每条记录包含哪些信息。
为什么要拆成不同的列?
如果把用户信息直接保存成一整段文字,人可以猜出每个值的含义,程序却不知道第一段一定是名字、第二段一定是年龄。把信息放进固定列后,“找出所有来自 Tokyo 的用户”就有了明确目标:查看 city 列;修改 Bob 的邮箱也只需改变 email 列,而不用重写整条记录。
| id | name | age | city | |
|---|---|---|---|---|
| 1 | Alice | 28 | Tokyo | alice@example.com |
| 2 | Bob | 31 | Osaka | bob@example.com |
一张表通常保存一类数据
实际项目通常不会把所有内容塞进一张巨大的表,而是按数据类型拆成多个表。购物网站可能至少包含 users、products 和 orders。它们分别保存用户、商品和订单,结构清楚,也可以独立维护。
列(Column)和字段(Field)
开发中还经常会听到 字段(Field)。人们会说“这个表有一个 email 字段”或“新增 status 字段”。严格谈表结构时,“列(Column)”更准确;日常交流和工具界面中,“字段(Field)”也很常见。初学阶段不必把它们看成完全不同的概念。
数据库和数据库软件不是一回事
MySQL、PostgreSQL、SQL Server 等软件属于 数据库管理系统(Database Management System,DBMS),负责创建、管理、查询和维护数据。Database 则是由这些系统管理的一组具体数据。
可以类比 Word 和 Word 文档:Word 是编辑文档的软件,一个具体的 .docx 文件才是文档。MySQL 是管理数据库的软件,shop 则是一个具体的数据库。
知识测验
认识常见的数据库产品
找出三个常见的数据库管理系统。对每个产品写下:它属于 DBMS 还是具体 Database、一个常见使用场景,以及它是否适合在个人电脑上学习。不要只复制产品宣传语。
下一节,我们会学习怎样用 SQL 向数据库表达“读、加、改、删”。