Menu

Supabase 数据库开发示例

对于不熟悉服务端开发的人来说,即使有了完整的全栈模板,可能依然会对数据库的创建、更新等操作很迷茫。

本章就来介绍一下,基于 Nexty 模板开发产品,如何更新内置的数据表、如何创建新的数据表来支持功能开发。本章只介绍开发示例,集成步骤请查看Supabase 集成

提示

从 2.1.0 版本开始,数据库 sql 文件统一放在 supabase/migrations/ 文件夹下,所有更新与创建操作均可以通过简单的命令完成,本章也是基于 2.1.0 开始版本讲解。

初始化数据库

当你 clone 了 Nexty 源码到本地后,会看到 supabase/migrations/ 文件夹下的数据表定义文件:

migrations files

现在需要先连接 Supabase 数据库并初始化 supabase/migrations/ 里面的数据库定义:

## 本地环境登录 supabase,根据提示按回车键,然后复制网页上的随机码,粘贴到命令行,再回车即登录成功
pnpm db:login
 
## 连接数据库,会要求输入数据库密码,输入创建 Supabase 填写的密码,此时命令行是不显示密码的,输入完成直接回车,会提示连接成功
pnpm db:link
 
## 自动初始化数据库和初始数据
pnpm db:update

在 Windows系统上,如果执行 pnpm db:update 遇到 “Invalid project ref format” 的错误,如图:

update error

请打开 package.json 修改 db:update 命令:

  "scripts": {
    // "db:update": "npm run db:push && npm run db:gen-types" // 删掉这一行
    "db:update": "npm run db:push ; npm run db:gen-types" // 改成这样
  }

现在你就可以在 Supabase 看到初始化后的所有数据库内容了:

supabase tables
supabase database overview

更新数据表字段

假设一个场景,我们希望用户注册的时候,根据 url 携带的参数记录来源,那么 users 表需要新增一个字段 referral

先通过命令创建一个新的迁移文件:

## npm run db:new-migration <new_feature_name>
 
npm run db:new-migration users_add_referral

执行命令后,会在 supabase/migrations 新增一个空文件,文件名结构是这样: <timestamp>_<new_feature_name>.sql,例如,本例子创建出来的文件名为 20250802164211_users_add_referral.sql

开始 vibe coding,在 Curosr 对话框选中已有的 users 表 sql 文件和新增的这个空文件,并告诉 AI:我需要在 users 新增字段记录用户来源,字段名是 referral,请你把数据表更新语句写入这个新文件。

AI 执行后,20250802164211_users_add_referral.sql 就有 sql 语句了:

supabase database overview

通过命令把新增的 sql 定义推送到 Supabase 项目:

npm run db:update

现在到 Supabase 上查看 users 表,会发现已经成功添加 referral 字段。

这是数据表扩展字段的示例,删除字段、更新字段定义等需求也可以用同样的步骤来完成。

新功能开发

对于新功能开发,vibe coding 步骤可以是这样:

  1. 先与 AI 讨论功能设计,经过多轮对话后确认需求并在 Notion 列出来
  2. 将确认好的需求发给 AI,要求输出一份完整的需求文档,包括功能设计和数据库设计
  3. 将需求文档发给 AI,要求按需求编写完整的 sql 语句,需包含字段定义、必要的索引、 RLS 策略、RPC 函数和触发器
  4. 通过 npm run db:new-migration <new_feature> 命令创建新的数据库迁移文件,并把 AI 提供的 sql 复制到新文件
  5. 通过 npm run db:update 命令推送到 Supabase 并更新 types
  6. 让 AI 根据需求文档和 sql 文件开始工作

如果你是编程新手或者不熟悉 Supabase 的开发者,RLS 策略、RPC 函数和触发器对你可能会比较抽象,但是如果你能够花一部分时间搞定这些知识,以后开发功能会变得很轻松,因为 Supabase 的这些独特设计因为 Supabase 的这些独特设计能够让你在数据库层面就完成大部分业务逻辑处理,减少前端和后端之间的复杂交互,同时确保数据安全性和一致性。一旦掌握了这些核心概念,你就能够快速构建出功能完整、安全可靠的应用程序。