@bettercms-ai/db
Drizzle ORM 用于 BetterCMS 的软件包—— 自动托管的 Postgres 软件包
postgres驾驶员.
概览
此软件包包含BetterCMS后端的所有数据库表定义. 用这个 滴入外科手术 与 postgres 用于自备的 Postgres 连接的驱动程序.
司马
14个与 PRD §9 数据模型相匹配的表格 :
| 图表 | 说明 |
|---|---|
workspaces | 顶层租户集装箱 |
users | 更好的用户管理账户 |
workspace_members | 用户工作空间与角色相接点 |
content_models | 对结构化内容的定义 |
content_entries | 内容模型实例 |
pages | 带有 JSONB 块树的 CMS 页面 |
media_assets | Cloudflare R2存储媒体元数据 |
forms | 支持 Webhook 格式定义 |
form_submissions | 来访者提交的表格 |
redirects | URL重定向规则(301/302/307/308) |
api_keys | 工作空间范围交付 API 密钥 |
plan_limits | 计划一级资源配额 |
audit_logs | 可变事件日志(第6阶段) |
关键设计决定
- 文本标识 ——所有主要密钥的使用
text与 BetterAuth 保持一致的 (noid) - 工作空间隔离 - 每张租户范围表都有一张
workspace_id text()风扇 - 软删除 - 表格与
deleted_at timestamp()可收回的删除 - 贾森布 用于
block_json, (中文(简体) ),fields, (中文(简体) ),data,以及event_data栏 - 索引 优化工作空间范围、弹道检查和状态过滤器
block_embedding—— 说text栏pages用于第二阶段 pgvector AI 搜索
使用量
import { db, schema } from "@bettercms-ai/db";
// Query pages for a workspace
const pages = await db
.select()
.from(schema.pages)
.where(eq(schema.pages.workspaceId, workspaceId));
// Insert a new page
await db.insert(schema.pages).values({
id: nanoid(),
workspaceId,
title: "Hello World",
slug: "hello-world",
status: "draft",
blockJson: [],
});
脚本
bun run db:generate # Generate migrations (drizzle-kit generate)
bun run db:push # Push schema to Neon (drizzle-kit push)
bun run db:migrate # Run migrations (drizzle-kit migrate)
bun run db:studio # Open Drizzle Studio (drizzle-kit studio)
环境
要求数 DATABASE_URL 在您的环境中:
DATABASE_URL=postgresql://user:password@localhost:5432/bettercms