Supabase 数据建模入门
这一篇学习数据建模的基础概念,并在 SQL Editor 里创建教程的第一张表。后续所有操作都在这张表上进行。
表、行、列
Supabase 的底层是 PostgreSQL,一个成熟的关系型数据库。理解数据模型,先理解三个概念
| 概念 | 类比 Excel | 说明 |
|---|---|---|
| 表(Table) | 一个 Sheet | 存放同一类数据的集合 |
| 行(Row) | Sheet 里的一行 | 一条完整的数据记录 |
| 列(Column) | Sheet 里的一列 | 数据的一个属性字段 |
例如用户资料表,每一行是一个用户,每一列是这个用户的一个属性,比如昵称、年龄、注册时间。
数据类型
给列选择正确的类型,是数据建模的第一步。常用类型如下
| 类型 | 用途 | 示例值 |
|---|---|---|
| text | 任意长度的文本 | 张三 |
| integer | 整数 | 18 |
| boolean | 真假值 | true |
| timestamptz | 带时区的时间戳 | 2026-08-15 10:00:00+00 |
| uuid | 全局唯一标识,认证用户 ID 的标准类型 | 一串 36 位字符 |
| numeric | 带小数的数字 | 9.99 |
PostgreSQL 类型比 MySQL 更丰富,入门阶段掌握上面这些就够用。
主键
主键(Primary Key)是每行数据的唯一身份证。主键列的值在整张表中不允许重复,数据库靠它区分每一行。Supabase 官方推荐使用 uuid 类型,配合 generated always as identity 自动生成。
创建 profiles 表
打开 SQL Editor,输入以下语句并运行
create table public.profiles (
id uuid primary key,
username text,
age integer,
is_vip boolean default false,
created_at timestamptz default now()
);
| 列 | 类型 | 说明 |
|---|---|---|
| id | uuid 主键 | 每个用户的唯一标识 |
| username | text | 用户昵称 |
| age | integer | 年龄,可空 |
| is_vip | boolean | 是否会员,默认 false |
| created_at | timestamptz | 创建时间,默认当前时间 |
这里先不填 id 的默认值,第六篇学到认证后,会用真实用户 ID 填入。运行成功后,到 Table Editor 里就能看到这张空表。
插入测试数据
为了让后续教程有数据可查,用 SQL 插入两条测试记录
insert into profiles (id, username, age, is_vip)
values
('11111111-1111-1111-1111-111111111111', '小明', 18, true),
('22222222-2222-2222-2222-222222222222', '小红', 20, false);
id 里的数字只是测试用的占位符,真实场景会替换成用户的真实 ID。
两种建表方式
Supabase 提供两种建表入口
| 方式 | 入口 | 特点 |
|---|---|---|
| Table Editor | 可视化界面点选 | 新手友好,但默认开启行级安全策略 |
| SQL Editor | 写 SQL 语句 | 灵活可控,默认不开启行级安全策略 |
如果你用 Table Editor 建表后发现查询结果为空,多半就是行级安全策略在拦截,这是新手最容易困惑的坑,第八篇会详细讲。
其他操作
- 修改表结构,用 alter table 语句添加或删除列
- 删除表,用 drop table profiles 语句,操作前务必确认
- 修改列名,用 rename 关键字
数据建模是后面所有功能的地基。接下来进入最常用的操作,第四篇学习用前端代码读取数据库。
下一篇 Supabase 数据查询入门