数据库知识篇

什么是表、行与列

数据库里的"Excel表格"

关系型数据库用表(Table) 来组织数据。如果你用过 Excel,理解表就很容易——每个表就是一个 Sheet,行是记录,列是字段。

💡 类比:一张"学生表"就像班级花名册。每一是一个学生,每一是一个信息项(姓名、学号、年龄)。

加载图表中...

表的结构

users 表

idnameemailagecreated_at
1张三zhang@mail.com252024-01-01
2李四li@mail.com302024-01-15
3王五wang@mail.com282024-02-01
概念Excel 对应说明
表名Sheet 名usersarticles
列(字段)列标题nameemail
行(记录)一行数据如 "张三" 的所有信息
单元格一个格子如 "张三"

列的数据类型

每一列都有固定的数据类型,就像 Excel 里设置单元格格式:

数据类型说明示例
INTEGER整数1, 42, 100
VARCHAR(n)最大n个字符的字符串"张三", "hello"
TEXT不限长度的文本文章内容
BOOLEAN布尔值true, false
TIMESTAMP时间戳2024-01-01 12:00:00
DECIMAL精确小数99.99
JSONJSON 数据{"key": "value"}

创建表:CREATE TABLE

CREATE TABLE users (
  id        SERIAL PRIMARY KEY,     -- 自增主键
  name      VARCHAR(100) NOT NULL,  -- 姓名,不能为空
  email     VARCHAR(255) UNIQUE,    -- 邮箱,不能重复
  age       INTEGER,                -- 年龄
  is_active BOOLEAN DEFAULT true,   -- 是否激活,默认true
  created_at TIMESTAMP DEFAULT NOW() -- 创建时间
);
加载图表中...

列的约束

约束含义作用
PRIMARY KEY主键唯一标识每一行,不能重复不能为空
NOT NULL非空这个字段必须有值
UNIQUE唯一这个字段的值不能重复
DEFAULT默认值不填时自动使用默认值
SERIAL自增自动生成递增的数字(1, 2, 3...)

主键:每行数据的"身份证"

主键(Primary Key) 是每行数据的唯一标识符,就像人的身份证号:

加载图表中...
  • 主键不能重复(每个人身份证号唯一)
  • 主键不能为空(必须有值)
  • 通常用自增的 id 作为主键

表与表的关系

实际项目中,多张表之间会有关联关系

加载图表中...

外键关联

articles 表通过 user_id 关联到 users 表

users 表

idname
1张三
2李四

articles 表

idtitleuser_id
1Hello World1
2学习SQL1
3React入门2

user_id = 1 表示这篇文章是张三写的。

CREATE TABLE articles (
  id       SERIAL PRIMARY KEY,
  title    VARCHAR(255) NOT NULL,
  content  TEXT,
  user_id  INTEGER REFERENCES users(id),  -- 外键,关联 users 表的 id
  created_at TIMESTAMP DEFAULT NOW()
);

常见的表设计模式

一对多(最常见)

一个用户有多篇文章,一篇文章属于一个用户:

加载图表中...

多对多

一篇文章可以有多个标签,一个标签可以属于多篇文章:

加载图表中...

设计表时的建议

建议说明
每张表都要有 id 主键唯一标识每条记录
加上 created_at 字段记录数据创建时间
字段名用小写+下划线user_name 而不是 userName
表名用复数users 而不是 user
适当拆表不同类型的数据分到不同表

🎯 AI编程小贴士:设计数据库表结构时,告诉 AI 你的业务需求——比如"帮我设计一个博客系统的数据库,需要用户、文章、评论、标签",它会帮你设计表结构、字段类型和表之间的关联关系。

小结

  • 是数据库存储数据的基本单位,类似 Excel 的 Sheet
  • 列(字段) 定义数据有哪些属性,每列有固定的数据类型
  • 行(记录) 是一条具体的数据
  • 主键是每行数据的唯一标识,通常用自增 id
  • 表与表之间通过外键建立关联(一对多、多对多)
  • 设计表时记得加 id 主键和 created_at 时间字段