数据库表结构说明
本文档描述项目使用的 PostgreSQL 数据库表及字段,便于配置数据库、排查问题或二次开发。
表名与代码中 lib/db/schema.ts 一致,迁移文件位于 lib/db/migrations/。
1. User(用户表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| email |
varchar(64) |
是 |
- |
邮箱 |
| password |
varchar(64) |
否 |
- |
密码(可为空,如钉钉登录) |
| name |
varchar(100) |
否 |
- |
用户姓名(显示用) |
| department |
varchar(256) |
否 |
- |
部门 |
| dingtalkUserId |
varchar(128) |
否 |
- |
钉钉用户ID |
| role |
varchar |
是 |
'regular' |
角色:guest / regular / admin |
| isActive |
boolean |
是 |
true |
是否启用 |
| monthlyImageLimit |
integer |
否 |
- |
每月出图限额,NULL/0 表示无限制 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
2. Chat(会话表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| createdAt |
timestamp |
是 |
- |
创建时间 |
| title |
text |
是 |
- |
会话标题 |
| userId |
uuid |
是 |
- |
用户ID,外键 → User.id |
| visibility |
varchar |
是 |
'private' |
可见性:public / private |
| lastContext |
jsonb |
否 |
- |
上次使用上下文(AppUsage) |
3. Message(消息表,新)— 表名:Message_v2
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| chatId |
uuid |
是 |
- |
会话ID,外键 → Chat.id |
| role |
varchar |
是 |
- |
角色(user/assistant 等) |
| parts |
json |
是 |
- |
消息内容片段 |
| attachments |
json |
是 |
- |
附件 |
| createdAt |
timestamp |
是 |
- |
创建时间 |
| video_storage_status |
varchar(20) |
否 |
'temporary' |
视频存储状态 |
| temporary_video_url |
text |
否 |
- |
临时视频URL |
| permanent_video_url |
text |
否 |
- |
永久视频URL |
| archived_at |
timestamp |
否 |
- |
归档时间 |
| video_metadata |
jsonb |
否 |
- |
视频元数据 |
4. Message(旧版,已弃用)— 表名:Message
保留兼容,新逻辑请用 Message_v2。
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| chatId |
uuid |
是 |
- |
会话ID |
| role |
varchar |
是 |
- |
角色 |
| content |
json |
是 |
- |
内容 |
| createdAt |
timestamp |
是 |
- |
创建时间 |
5. Vote_v2(投票表,新)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| chatId |
uuid |
是 |
- |
会话ID,外键 → Chat.id |
| messageId |
uuid |
是 |
- |
消息ID,外键 → Message_v2.id |
| isUpvoted |
boolean |
是 |
- |
是否点赞 |
| (主键) |
- |
- |
- |
(chatId, messageId) 联合主键 |
6. Vote(旧版,已弃用)— 表名:Vote
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| chatId |
uuid |
是 |
- |
会话ID |
| messageId |
uuid |
是 |
- |
消息ID(旧 Message 表) |
| isUpvoted |
boolean |
是 |
- |
是否点赞 |
7. Document(文档表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键之一 |
| createdAt |
timestamp |
是 |
- |
主键之一 |
| title |
text |
是 |
- |
标题 |
| content |
text |
否 |
- |
内容 |
| text |
varchar |
是 |
'text' |
类型:text / code / image / sheet |
| userId |
uuid |
是 |
- |
用户ID,外键 → User.id |
主键:(id, createdAt)
8. Suggestion(建议表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| documentId |
uuid |
是 |
- |
文档ID |
| documentCreatedAt |
timestamp |
是 |
- |
文档创建时间 |
| originalText |
text |
是 |
- |
原文 |
| suggestedText |
text |
是 |
- |
建议文本 |
| description |
text |
否 |
- |
描述 |
| isResolved |
boolean |
是 |
false |
是否已解决 |
| userId |
uuid |
是 |
- |
用户ID,外键 → User.id |
| createdAt |
timestamp |
是 |
- |
创建时间 |
9. Stream(流表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| chatId |
uuid |
是 |
- |
会话ID,外键 → Chat.id |
| createdAt |
timestamp |
是 |
- |
创建时间 |
10. SystemSettings(系统设置表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| key |
varchar(128) |
是 |
- |
配置键,唯一 |
| value |
jsonb |
是 |
- |
配置值 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
11. ToolConfig(工具配置表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| toolName |
varchar(128) |
是 |
- |
工具名称,唯一 |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| description |
text |
否 |
- |
描述 |
| config |
jsonb |
否 |
- |
配置 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
12. AiProvider(AI 提供商表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| name |
varchar(128) |
是 |
- |
提供商名称 |
| type |
varchar |
是 |
'custom' |
类型:alibaba / openai / custom / local / gemini / huanke-gemini / qianwen-video / volcano-vision / volcano-video / alibaba-image |
| baseUrl |
text |
是 |
- |
API 基础 URL |
| apiKey |
text |
是 |
- |
API Key |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
13. AiModel(AI 模型表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| providerId |
uuid |
是 |
- |
提供商ID,外键 → AiProvider.id |
| modelId |
varchar(128) |
是 |
- |
模型ID(如 qwen-turbo) |
| displayName |
varchar(128) |
是 |
- |
显示名称 |
| description |
text |
否 |
- |
描述 |
| supportsVision |
boolean |
是 |
false |
是否支持视觉 |
| supportsImageGen |
boolean |
是 |
false |
是否支持生图 |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| isDefault |
boolean |
是 |
false |
是否默认模型 |
| sortOrder |
integer |
是 |
0 |
排序 |
| capabilities |
jsonb |
否 |
- |
能力配置(如视频) |
| defaultParams |
jsonb |
否 |
- |
默认参数 |
| is_sub_model |
boolean |
是 |
false |
是否子模型(不单独展示) |
| parent_model_id |
uuid |
否 |
- |
父模型ID |
| fallbackModelId1 |
varchar(128) |
否 |
- |
备用模型ID 1 |
| fallbackModelId2 |
varchar(128) |
否 |
- |
备用模型ID 2 |
| imageGenConfig |
jsonb |
否 |
- |
生图配置 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
14. StorageConfig(存储配置表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| name |
varchar(128) |
是 |
- |
配置名称 |
| type |
varchar |
是 |
's3' |
类型:s3 / local |
| endpoint |
text |
否 |
- |
S3 端点 |
| region |
varchar(64) |
否 |
- |
区域 |
| bucket |
varchar(128) |
否 |
- |
存储桶 |
| accessKeyId |
text |
否 |
- |
Access Key ID |
| secretAccessKey |
text |
否 |
- |
Secret Access Key |
| publicUrl |
text |
否 |
- |
公开访问 URL 前缀 |
| isDefault |
boolean |
是 |
false |
是否默认存储 |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
15. SiteSettings(网站设置表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| siteName |
varchar(128) |
是 |
'AI Chatbot' |
站点名称 |
| siteLogo |
text |
否 |
- |
站点 LOGO(日间) |
| siteLogoDark |
text |
否 |
- |
站点 LOGO(夜间) |
| favicon |
text |
否 |
- |
favicon |
| showAutoModel |
boolean |
是 |
true |
是否显示「自动」模型 |
| defaultTheme |
varchar(16) |
是 |
'system' |
默认主题:system / light / dark |
| usageTimeEnabled |
boolean |
是 |
false |
是否启用使用时间限制 |
| usageTimeStart |
varchar(5) |
否 |
'08:00' |
开始时间 HH:mm |
| usageTimeEnd |
varchar(5) |
否 |
'20:00' |
结束时间 HH:mm |
| usageTimeMessage |
text |
否 |
- |
超时提示文案 |
| bannerEnabled |
boolean |
是 |
true |
是否显示广告横幅 |
| bannerText |
text |
否 |
- |
横幅文案 |
| bannerLink |
text |
否 |
- |
横幅链接 |
| toolbox1Name |
varchar(64) |
否 |
'工具箱' |
工具箱1名称 |
| toolbox1Enabled |
boolean |
是 |
true |
工具箱1是否显示 |
| toolbox2Name |
varchar(64) |
否 |
'工具箱2' |
工具箱2名称 |
| toolbox2Enabled |
boolean |
是 |
false |
工具箱2是否显示 |
| tutorialVideoUrl |
text |
否 |
- |
教程视频链接 |
| tutorialEnabled |
boolean |
是 |
false |
是否显示教程 |
| rankingEnabled |
boolean |
是 |
true |
是否显示精选榜 |
| canvasEnabled |
boolean |
是 |
true |
是否启用无限画布 |
| canvasDefaultModelId |
varchar(128) |
否 |
- |
画布默认模型ID |
| canvasAutoModeDefaultModelId |
varchar(128) |
否 |
- |
画布智能自动模式默认模型ID |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
16. NavLinks(导航链接表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| name |
varchar(64) |
是 |
- |
名称 |
| url |
text |
是 |
- |
链接 |
| order |
integer |
是 |
0 |
排序 |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| toolboxGroup |
integer |
是 |
1 |
工具箱分组:1 或 2 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| createdBy |
uuid |
否 |
- |
创建人,外键 → User.id |
17. TutorialVideos(教程视频表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| title |
varchar(128) |
是 |
- |
标题 |
| videoUrl |
text |
是 |
- |
视频链接 |
| coverUrl |
text |
否 |
- |
封面图链接 |
| description |
text |
否 |
- |
描述 |
| order |
integer |
是 |
0 |
排序 |
| isEnabled |
boolean |
是 |
true |
是否启用 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| createdBy |
uuid |
否 |
- |
创建人,外键 → User.id |
18. AuthSettings(认证配置表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| dingTalkAppKey |
text |
否 |
- |
钉钉 AppKey |
| dingTalkAppSecret |
text |
否 |
- |
钉钉 AppSecret |
| dingTalkOrganizations |
jsonb |
否 |
- |
多组织钉钉配置 [{ name, appKey, appSecret }] |
| isDingTalkEnabled |
boolean |
是 |
false |
是否启用钉钉登录 |
| isRegistrationEnabled |
boolean |
是 |
true |
是否开放注册 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
| updatedBy |
uuid |
否 |
- |
更新人,外键 → User.id |
19. LoginToken(临时登录令牌表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| token |
text |
是 |
- |
令牌,唯一 |
| email |
varchar(64) |
是 |
- |
邮箱 |
| expiresAt |
timestamp |
是 |
- |
过期时间 |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
20. GeneratedImage(生成图片记录表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| userId |
uuid |
是 |
- |
用户ID,外键 → User.id |
| chatId |
uuid |
否 |
- |
会话ID,外键 → Chat.id |
| messageId |
uuid |
否 |
- |
消息ID |
| thumbnailUrl |
text |
是 |
- |
缩略图 URL |
| originalUrl |
text |
是 |
- |
原图 URL |
| imageSize |
varchar(10) |
否 |
'2K' |
图片尺寸 |
| prompt |
text |
否 |
- |
提示词 |
| modelId |
varchar(128) |
否 |
- |
模型ID |
| isFeatured |
boolean |
是 |
false |
是否精选 |
| featuredAt |
timestamp |
否 |
- |
精选时间 |
| featuredBy |
uuid |
否 |
- |
精选操作人,外键 → User.id |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
21. CanvasProject(画布项目表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| userId |
uuid |
是 |
- |
用户ID,外键 → User.id |
| title |
varchar(256) |
是 |
'未命名画布' |
标题 |
| description |
text |
否 |
- |
描述 |
| thumbnail |
text |
否 |
- |
缩略图 URL |
| canvasData |
jsonb |
否 |
- |
画布数据 { nodes, edges, viewport } |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
22. CanvasNode(画布节点表)
| 字段名 |
类型 |
必填 |
默认 |
说明 |
| id |
uuid |
是 |
defaultRandom() |
主键 |
| projectId |
uuid |
是 |
- |
画布项目ID,外键 → CanvasProject.id |
| type |
varchar(32) |
是 |
- |
类型:message / image / video / text / scene-fusion |
| position |
jsonb |
否 |
- |
位置 { x, y } |
| size |
jsonb |
否 |
- |
尺寸 { width, height } |
| data |
jsonb |
否 |
- |
节点数据 |
| connections |
jsonb |
否 |
[] |
连接列表 |
| parentId |
uuid |
否 |
- |
父节点ID |
| createdAt |
timestamp |
是 |
now() |
创建时间 |
| updatedAt |
timestamp |
是 |
now() |
更新时间 |
使用说明
- 建表:项目使用 Drizzle 迁移,首次部署请执行
pnpm run db:migrate 或项目内定义的迁移命令,表会按 lib/db/migrations/ 中的 SQL 自动创建/更新。
- 连接:数据库连接由环境变量配置(如
POSTGRES_URL),请勿将包含密码的 .env 提交到仓库。
- 系统配置:部分功能依赖
SystemSettings 表中的 key(如 scene_fusion_config、站点相关 key),具体 key 名见代码中 getSystemSetting 的用法。