lovart3/DATABASE_SCHEMA.md

15 KiB
Raw Blame History

数据库表结构说明

本文档描述项目使用的 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 的用法。