数据库是大多数 Web 应用的核心——但直接写 SQL 对 AI 来说"太自由了",容易出错。ORM(对象关系映射)给 AI 提供了结构化的约束,反而让 AI 生成的代码更可靠。
为什么 ORM 对 AI 更友好?因为 SQL 的写法太多样了——同一个查询可以用 JOIN、子查询、CTE 等多种方式实现。ORM 的 API 是固定的、结构化的,AI 知道"正确的写法"只有一种。约束反而带来了确定性。
Prisma(推荐首选)
Prisma 是目前 AI 最熟悉的 Node.js ORM。
为什么 AI 友好:
schema.prisma),AI 修改时不会遗漏Vibe Coding 示例:
帮我设计数据库模型:
- User:用户名、邮箱、密码哈希、创建时间
- Post:标题、内容、发布时间、作者(关联 User)
- Comment:内容、发布时间、作者(关联 User)、文章(关联 Post)
使用 Prisma + SQLite。
AI 会创建完整的 Prisma Schema、运行迁移、生成类型。整个过程只需要几十秒。
Schema 示例:
model User {
id String @id @default(cuid())
name String
email String @unique
posts Post[]
comments Comment[]
createdAt DateTime @default(now())
}
model Post {
id String @id @default(cuid())
title String
content String
author User @relation(fields: [authorId], references: [id])
authorId String
comments Comment[]
createdAt DateTime @default(now())
}
model Comment {
id String @id @default(cuid())
content String
author User @relation(fields: [authorId], references: [id])
authorId String
post Post @relation(fields: [postId], references: [id])
postId String
createdAt DateTime @default(now())
}
Prisma 的"schema-first"流程:
Prisma 的工作流程是:先定义数据结构(Schema),然后自动生成查询 API。
定义 Schema → 运行迁移生成数据库表 → 在代码中使用 Prisma Client 查询
AI 完全知道这个流程的每一步。你告诉它"我要什么数据模型",它自动执行后面的所有步骤。你只需要验证"数据能不能存进去、能不能读出来"。
可能遇到的问题:
你:Prisma 迁移报错说 SQLite 不支持某些字段类型。
AI:已将 Enum 类型改为 String,并在应用中做校验。
你:查询速度慢,加了 @relation 注解还是不行。
AI:检查发现缺少索引。已在关联字段上添加了索引配置。
Drizzle ORM(更接近 SQL)
Drizzle 是一个更"SQL 原生"的 ORM。如果你熟悉 SQL,Drizzle 会更自然。
AI 友好度: 高——但不如 Prisma。原因在于 Drizzle 的类型推断更复杂,AI 偶尔会生成错误的类型。
什么时候选 Drizzle:
一个有用的对比: Prisma 是"先有 Schema 后有查询"(schema-first),Drizzle 是"先有查询后有类型"(query-first)。Prisma 的思维模式是"定义数据结构,然后自动获得 API",Drizzle 的思维模式是"写查询,类型自动推断"。对于 Vibe Coding 来说,Prisma 的 schema-first 模式更友好,因为 AI 只需要生成一份 Schema 文件,剩下的全部自动完成。
NextAuth(推荐免费项目)
NextAuth(现在叫 Auth.js)是 Next.js 生态中最流行的认证库。
为什么 AI 友好:
一句话实现认证:
帮我配置 NextAuth:
- GitHub OAuth 登录
- 数据库适配器(Prisma)
- 保护 /dashboard 路由,未登录时重定向到 /login
AI 会:安装包、创建 auth.ts 配置、添加 API 路由、封装 Session Provider、创建中间件保护路由。
配置文件的典型结构:
// auth.ts
import NextAuth from "next-auth";
import GitHub from "next-auth/providers/github";
import { PrismaAdapter } from "@auth/prisma-adapter";
import { prisma } from "./lib/prisma";
export const { handlers, auth, signIn, signOut } = NextAuth({
adapter: PrismaAdapter(prisma),
providers: [GitHub],
pages: {
signIn: "/login",
},
});
总共约 15 行代码。AI 会同时创建 Prisma 的 User/Session/Account 模型适配器。
需要注意的步骤: GitHub OAuth 需要在 GitHub 开发者设置中创建 OAuth App,获取 Client ID 和 Secret。AI 无法帮你完成这个步骤——这是少数几个需要你手动操作的环节。
帮我创建 GitHub OAuth 的 Client ID 和 Secret:
1. 打开 GitHub 设置 → Developer settings → OAuth Apps
2. 点击 "New OAuth App"
3. Application name 填你的应用名
4. Homepage URL 填 http://localhost:3000
5. Authorization callback URL 填 http://localhost:3000/api/auth/callback/github
6. 创建后复制 Client ID 和 Client Secret
7. 添加到 .env 文件中
AI 会告诉你具体的回调 URL 和需要添加到 .env 的变量名。
Clerk(推荐需要多登录方式的项目)
Clerk 是一个托管认证服务,提供开箱即用的登录页面、用户管理、组织管理。
AI 友好度: 极高——因为不需要配置数据库、不需要处理 session、不需要写登录页面。
示例:
帮我配置 Clerk 认证:
- 登录页面使用 Clerk 的预置页面
- 支持 GitHub 和 Google OAuth
- 用户信息显示在右上角
- 保护 /dashboard 路由
AI 会:安装 @clerk/nextjs、创建 middleware.ts、添加 ——不需要数据库配置,不需要写登录页面 UI。
什么时候选哪个:
| 场景 | 推荐 | 原因 |
|---|---|---|
| 免费项目、自建部署 | NextAuth | 完全自控,无第三方依赖 |
| 快速 MVP、个人项目 | Clerk | 15 分钟完成认证配置 |
| 需要多种登录方式 | Clerk | 内置 10+ OAuth provider |
| 需要精细权限控制 | NextAuth | 自定义 claim 和 role |
| 不想折腾配置 | Clerk | 预置登录页面 UI |
在 Vibe Coding 中,数据库和认证通常是同步配置的——因为认证需要用户数据,而用户数据存在数据库里。
一个典型的高效指令:
创建一个 Next.js 项目:
1. Prisma + SQLite 数据库
2. NextAuth 配置 GitHub 登录
3. User model(id, name, email, image)
4. 首页显示登录用户的欢迎语
这条指令覆盖了:项目初始化、数据库配置、认证配置、路由保护、前端展示——全部由 AI 在几分钟内完成。
"一体化指令"的效率: 如果你分多次对话完成同样的配置,每次 AI 都需要重新理解项目状态。一条指令把全部需求说清楚,AI 一次性完成所有配置。你验证一次,而不是验证多次。这是 Vibe Coding 中"信息密度"的体现——你的指令越完整,AI 越少走回头路。
你:GitHub 登录后,用户信息没有保存到数据库。
AI:检查发现 PrismaAdapter 没有正确配置。已在 auth.ts 中修复。
你:Clerk 的登录页面和我的网站风格不搭。
AI:Clerk 支持自定义外观。已添加 appearance 配置,匹配你的网站主题色。
你:注销后,点浏览器回退还能看到之前的页面。
AI:这是客户端缓存问题。已在 middleware 中添加了 session 刷新逻辑。
对 Claude Code 说:
"帮我创建一个 Next.js 项目,集成 Prisma + SQLite 数据库和 NextAuth 认证(GitHub 登录)。User 模型包含 id、name、email、image。首页显示登录状态和用户信息。"
进阶练习:
完成基础配置后,让 AI "在 User 模型中添加一个 role 字段('admin' 或 'user',默认 'user')。创建一个中间件,只有 role 为 'admin' 的用户才能访问 /admin 路径。普通用户访问时显示'无权限'提示。" 观察 AI 如何修改 Prisma Schema、创建新中间件、以及处理 session 中的自定义字段。