学习数据库就需要接触数据库的库、表、字段、行、列、主键、Schema...今天我们通过电脑文件夹和Excel,学习数据库最核心的概念
01. 从一个你最熟悉的场景开始
打开你的电脑D盘,是不是这样:
📁 工作文档
📁 旅游照片
📁 电影下载
📁 学习资料
每个文件夹里,又分门别类放着各种文件。
这个场景,就是你理解数据库的最佳入口。
02. 数据库 = D盘里的一个文件夹
数据库是什么?
—— 数据库就是一个专门存放数据的文件夹。
区别只在于:
| 你的电脑 | 数据库世界 |
|---|
| D盘 | 数据库服务器(一台专门存数据的电脑) |
| D盘里的一个文件夹 | 一个数据库 |
| 文件夹的名字 | 数据库名 |
比如微信的后台,就有一个叫 wechat_db 的文件夹(数据库),里面专门存着所有微信用户的数据。
就这么简单:数据库 ≈ 分类存放数据的文件夹。
03. 表 = 文件夹里的Excel文件
现在打开 wechat_db 这个文件夹,里面是什么?
不是散乱的文件,而是分类清晰的表格:
📊 用户表(存着所有微信用户)
📊 好友关系表(存着谁是谁的好友)
📊 朋友圈表(存着每个人发的朋友圈)
📊 聊天记录表(存着所有消息)
这些表格,就是数据库里的“表”(Table)。
和你电脑里的Excel文件一模一样:
| 你的电脑 | 数据库 |
|---|
| 一个Excel文件(如“客户名单.xlsx”) | 一张表 |
| 文件名(客户名单) | 表名 |
一个数据库里,可以有几十张甚至几百张这样的“Excel文件”(表)。
04. 列(字段)= Excel表格的列标题
打开“用户表.xlsx”,你会看到这样的表格:
| 用户ID | 昵称 | 手机号 | 注册时间 | 所在城市 |
|---|
| 10001 | 张三 | 1381234 | 2023-01-01 | 北京 |
| 10002 | 李四 | 1395678 | 2023-01-02 | 上海 |
| 10003 | 王五 | 1379012 | 2023-01-03 | 广州 |
最上面这一行——用户ID、昵称、手机号、注册时间、所在城市——就是列,在数据库里也叫字段。
列的作用是什么?就像你设计Excel表格时,先写好表头,规定每一列要填什么信息。
每一列都有自己的“规矩”:
用户ID:必须是数字
手机号:必须是11位数字
注册时间:必须是日期格式
05. 行(记录)= Excel里的一行数据
表头下面的一行行数据,就是行,在数据库里也叫记录。
第一行:张三的所有信息 → 一条记录
第二行:李四的所有信息 → 一条记录
如果说列是“填空题的题目”,行就是“填上去的具体答案”。
一张表,就是由:
06. 主键 = 每个人的身份证号
现在问题来了:
如果表里有两个人同名同姓都叫“张三”,怎么区分他们?
这时候就需要主键。
主键(Primary Key)就是能唯一标识每一行数据的“身份证号”。
在我们这张表里:
“昵称”不能做主键(因为可能有重复)
“手机号”理论上可以,但万一有人没填呢?
“所在城市”更不能做主键(太多人重复)
最合适做主键的是用户ID:
每个用户ID都不一样(唯一性)
每个人必须有用户ID(不能为空)
而且永远不会变(稳定性)
主键的三个特点:
唯一:整个表里不能有重复
非空:每一行都必须有
稳定:一旦确定,最好不变
就像身份证号之于我们每个人,主键就是每一行数据的“唯一身份标识”。
07. 数据类型 = Excel的“单元格格式”
注:该部分的数据类型以 MySQL 兼容模式 为例
在Excel里,你可以设置单元格格式:
数据库里也一样,每一列都要指定数据类型:
| | | |
|---|
| INTEGER | | |
| VARCHAR(20) | | |
| CHAR(11) | | |
| DATE | | |
| SMALLINT | | |
| DECIMAL(3,2) | | |
| TEXT | | |
数据类型决定了这一列能填什么“种类”的数据。
08. Schema(模式):整张表的“设计蓝图”
把上面所有东西合在一起,就是Schema。
Schema = 整张表的完整设计蓝图
它包含四个层面:
第一层:有哪些列?
第二层:每列什么数据类型?
第三层:每列还有哪些约束?
用户ID:不能为空,且唯一(主键)
手机号:不能为空
年龄:必须在0-150之间
第四层:表与表之间的关系
比如微信数据库里:
这些表和表之间的关联规则,也是Schema的重要组成部分。
09. 一张图看懂所有概念
数据库(微信数据文件夹)│├── 表1:用户表(用户信息.xlsx)│ ├── 列(字段):用户ID(主键) | 昵称 | 手机号 | 注册时间 | 所在城市│ ├── 行(记录):10001 | 张三 | 138*** | 2023-01-01 | 北京│ ├── 行(记录):10002 | 李四 | 139*** | 2023-01-02 | 上海│ └── 数据类型:INT | VARCHAR | CHAR(11) | DATE | VARCHAR│├── 表2:朋友圈表(朋友圈内容.xlsx)│ ├── 列(字段):朋友圈ID(主键) | 发布者ID | 内容 | 发布时间│ ├── 行(记录):20001 | 10001 | 今天天气真好 | 2023-01-01 10:00│ └── 行(记录):20002 | 10002 | 晚餐打卡 | 2023-01-02 18:30│└── Schema(整个文件夹的设计蓝图) ├── 用户表:有哪些列、每列什么类型、什么约束 ├── 朋友圈表:有哪些列、每列什么类型、什么约束 └── 关联规则:朋友圈表的“发布者ID”必须引用用户表的“用户ID”
10. 现在,你能看懂这句“黑话”了吗?
“我们需要设计一下数据库的Schema,先确定有哪些表,每张表有哪些字段,字段的数据类型和约束,主键怎么设,表和表之间怎么关联。”
翻译一下:
“咱们得先把文件夹结构设计好:
需要几个Excel文件(表)?
每个文件里表头(字段)怎么设计?
每个字段填什么格式的数据(数据类型)?
每个字段有什么规则(约束)?
哪一列是唯一标识(主键)?
不同文件之间怎么通过某些列关联起来?”
11. 总结:一张表对照所有概念
| 术语 | 其实就是 | 举例 |
|---|
| 数据库 | D盘里专门放数据的文件夹 | “微信数据”文件夹 |
| 表 | 文件夹里的Excel文件 | “用户表.xlsx” |
| 列(字段) | Excel表格的列标题 | 用户ID、昵称、手机号 |
| 行(记录) | Excel表格的一行数据 | 10001、张三、138*** |
| 数据类型 | 单元格格式设置 | 整数、文本、日期 |
| 主键 | 每一行的唯一身份证号 | 用户ID |
| 约束 | 对数据的额外规则 | 不能为空、必须唯一、年龄必须在 0~150 之间 |
| Schema | 整个表格的设计蓝图 | 以上所有内容的总和 |