Vibe Tutorial
数据持久化与数据库

7.2 关系型数据库基础

Tip

理解关系型数据库(RDBMS)的基本结构,学会用"表格"思维来组织数据。


1. 为什么要学这个?

你用 Excel 记录客户信息。一开始只有100人,很爽。

后来变成了10万人。你打开文件要卡5分钟。

更要是命的是,张三在第一行填了"13800000000",李四在第1000行也填了一模一样的手机号。你的 Excel 没有任何提示。当你给客户发短信时,张三收到了两条。

学会数据库,就像给你的数据装上了智能防撞系统,任何重复、错误的数据在录入的瞬间就会被拦截。


2. 核心概念

📝 核心比喻:关系型数据库 = "严谨版"的超级 Excel

2.1 基础结构 (Structure)

想象一个 data.xlsx 文件:

  • Table (表):就是 Excel 里的 Sheet 工作表
    • 例如:一张名为 Users 的 Sheet。
  • Column (列/字段):就是第一行的 表头 (Header)
    • 它定了规矩:这一列只能填什么。比如 age 列只能填数字,填"十八岁"就会报错。
  • Row (行/记录):就是实实在在的 填入数据
    • 一行代表一个真实用户。

2.2 关键约束 (Constraint)

Excel 允许你随便写,数据库不行:

  • Primary Key (主键):数据的 身份证号
    • 通常叫 id。绝对唯一,绝对不能为空。张三和李四可以同名,但 ID 绝对不同。
  • Foreign Key (外键):表与表之间的 连接线
    • 比如"订单表"里有一列 user_id,它指向"用户表"的 id
    • 这就是 "关系型" (Relational) 的由来——数据不是孤立的,是互相关联的。

技术定义:关系型数据库 (RDBMS) 是基于关系模型来组织数据的数据库。通过Schema (模式) 定义表结构,通过 SQL 语言进行操作。

关系结构图

erDiagram
    User ||--o{ Post : "作者 (写了)"
    
    User {
        int id PK "主键 (身份证)"
        string email "邮箱 (唯一)"
        string name "姓名"
    }

    Post {
        int id PK "主键"
        string title "标题"
        int author_id FK "外键 (指向User)"
    }

3. 对照理解

🏷️ 概念 📊 对应 Excel 📝 例子
Database 整个 .xlsx 文件 你的电商系统数据库
Table Sheet1 工作表 用户表 (Users)
Column 表头 (A列, B列...) 姓名, 手机号, 余额
Row 第2行, 第3行... 张三, 138xxx, 100元
Schema 数据验证规则 "手机号"列不允许重复

4. 避坑指南

❌ 不要这样做 ✅ 应该这样做 💡 为什么
用"姓名"做主键 必须有一个 id 字段 名字会重复,身份证号(ID)才不会。一旦重名,系统就分不清谁是谁了。
时间存成字符串 "2024-01-01" 使用 Timestamp 类型 字符串没法计算"3天前"。用专业的时间类型才能做日期运算。
以为 NULL 就是 0 理解 NULL 是"未知" 0 是一个数字,NULL 是"这里什么都没有"。填错了会导致统计数据偏差。

5. 真实案例

Story

2020年,英国防疫表格溢出事故

2020年10月,英国公共卫生部 (PHE) 发现新冠确诊病例统计少了 16,000 例。原因令人窒息:他们竟然用 Excel (.xls 老格式) 来汇总全国数据。老版 Excel 最大只支持 65,536 行。当确诊病例超过这个数时,多出来的数据直接被截断丢弃了,没有任何报错。这导致1.6万名确诊者没有被及时追踪隔离。

Vibe心法:不仅要选对工具,还要懂工具的极限——Excel 的上限是行数,数据库的下限是规范。


6. 本章小结

  1. 📏 无规矩不成方圆:数据库强制要求定义每一列的类型,防止垃圾数据混入。
  2. 🔑 身份证不能丢:每一行数据都必须有唯一的 id (主键)。
  3. 🔗 万物皆有关联:通过外键 (Foreign Key) 把用户、订单、文章连成一张大网。