文档
开发指南数据库

数据库

🚀 Cheatsheet (快速执行)

目标: 5分钟内连上数据库,能增删改查用户数据

核心命令:

# 1. 启动数据库管理界面
bun db:studio

# 2. 同步数据库结构
bun db:push

# 3. 填充测试数据
bun db:seed

最简使用:

import { prisma } from '@/lib/database'

// 查询用户
const user = await prisma.user.findUnique({
  where: { email: 'user@example.com' }
})

// 创建用户
const newUser = await prisma.user.create({
  data: { email: 'new@example.com', name: 'New User' }
})

❓ 为什么要做这件事

对 MVP 的直接好处:

  • 用户数据存储: 注册、登录、个人信息都需要数据库
  • 业务数据管理: 订单、内容、设置等核心数据
  • 类型安全: Prisma 让你不用担心数据类型错误
  • 快速开发: 可视化管理界面,不用写 SQL

如果不做会怎样: 数据只能存在内存里,刷新就没了,完全不像个正经产品。

🤔 为什么选择 PostgreSQL + Prisma

我们为什么用这个组合:

  • PostgreSQL: 功能强大、开源免费、云服务选择多
  • Prisma: 写起来像操作 JavaScript 对象,不用学 SQL
  • 类型安全: TypeScript 自动补全,减少 90% 的数据库错误

真实使用体验:

// 😍 Prisma 写法 - 自动补全,不会写错
const user = await prisma.user.findUnique({
  where: { email },
  include: { organizations: true }
})

// 😤 原生 SQL 写法 - 容易写错,没有提示
const result = await db.query(
  'SELECT * FROM users WHERE email = $1', [email]
)

🧠 简要原理 & 最简案例

Prisma 工作原理: 你定义数据结构 → Prisma 生成类型和函数 → 你调用函数操作数据

核心文件位置:

  • src/lib/database/prisma/schema.prisma - 定义数据结构
  • src/lib/database/index.ts - 导出数据库连接

最简示例 - 用户管理:

// 1. Schema 定义 (已经写好了)
model User {
  id    String @id @default(cuid())
  email String @unique
  name  String?
}

// 2. 实际使用
import { prisma } from '@/lib/database'

// 获取所有用户
const users = await prisma.user.findMany()

// 按 email 查找
const user = await prisma.user.findUnique({
  where: { email: 'test@example.com' }
})

// 创建新用户
const newUser = await prisma.user.create({
  data: {
    email: 'new@example.com', 
    name: 'New User'
  }
})

🛠️ 实际操作步骤

1. 连接数据库 (2分钟)

选择数据库服务 (推荐 Sealos):

# 国内用户推荐 Sealos
DATABASE_URL="postgresql://user:pass@xxx.sealos.io:5432/db"

# 国外用户推荐 Supabase  
DATABASE_URL="postgresql://user:pass@xxx.supabase.co:5432/postgres"

2. 本地开发 (1分钟)

# 同步数据库结构
bun db:push

# 打开管理界面
bun db:studio

3. 开始使用 (2分钟)

# 填充一些测试数据
bun db:seed

# 现在可以在 http://localhost:5555 看到数据了

🔧 日常使用命令

开发时最常用:

bun db:studio     # 打开可视化管理界面
bun db:push       # 同步数据库结构 (开发时用)
bun db:seed       # 填充测试数据

部署时用到:

bun db:migrate    # 生成迁移文件 (生产环境用)
bun db:deploy     # 应用到生产数据库

💡 实用技巧

数据库选择建议

  • 本地开发: 用 Docker 启动 PostgreSQL
  • 测试/演示: 用 Sealos (国内) 或 Supabase (国外)
  • 生产环境: 根据用户位置选择云服务

常见问题快速解决

# 连接失败 → 检查 .env 文件的 DATABASE_URL
# 类型错误 → 运行 bun db:generate  
# 数据乱了 → 运行 bun db:reset (开发环境)

查询优化小技巧

// ✅ 一次查询获取关联数据 (快)
const userWithOrgs = await prisma.user.findUnique({
  where: { id },
  include: { organizations: true }
})

// ❌ 多次查询 (慢)
const user = await prisma.user.findUnique({ where: { id } })
const orgs = await prisma.organization.findMany({ where: { userId: id } })

📎 延伸阅读

官方资源:

推荐工具:

云服务推荐:

  • Sealos - 国内 PostgreSQL 云服务
  • Supabase - 国外 PostgreSQL + 更多功能

下一步: 学会数据库后,去看 [API 开发]./api) 来构建后端接口。