# 数据库结构文档(PostgreSQL) 本文档根据 `backend/design/db_schema_pgsql.sql` 生成,描述当前核心表结构、字段、约束与索引。 ## 0. 租户与组织 ### 0.1 `sys_tenant`(租户表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 租户ID | | tenant_code | VARCHAR(64) | NOT NULL, UNIQUE | 租户编码 | | tenant_name | VARCHAR(128) | NOT NULL | 租户名称 | | status | SMALLINT | NOT NULL, DEFAULT 1 | 状态 | | expire_time | TIMESTAMP(6) | | 过期时间 | | contact_name | VARCHAR(64) | | 联系人 | | contact_phone | VARCHAR(32) | | 联系电话 | | remark | VARCHAR(255) | | 备注 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除标记 | 索引: - `uk_tenant_code`:`UNIQUE (tenant_code) WHERE is_deleted = FALSE` ### 0.2 `sys_org`(组织架构表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 组织ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | parent_id | BIGINT | | 父级组织ID | | org_name | VARCHAR(128) | NOT NULL | 组织名称 | | org_code | VARCHAR(64) | | 组织编码 | | org_path | VARCHAR(512) | | 组织路径 | | sort_order | INTEGER | DEFAULT 0 | 排序 | | status | SMALLINT | DEFAULT 1 | 状态 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT CURRENT_TIMESTAMP | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除标记 | 外键: - `fk_org_parent`:`parent_id -> sys_org(id)` - `fk_org_tenant`:`tenant_id -> sys_tenant(id)` 索引: - `idx_org_tenant`:`(tenant_id)` ## 1. 用户与角色 ### 1.1 `sys_user`(用户表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | user_id | BIGSERIAL | PK | 用户ID | | username | VARCHAR(50) | NOT NULL, UNIQUE | 登录名 | | display_name | VARCHAR(50) | NOT NULL | 显示名 | | email | VARCHAR(100) | | 邮箱 | | phone | VARCHAR(30) | UNIQUE | 手机号 | | password_hash | VARCHAR(255) | NOT NULL | 密码哈希 | | status | SMALLINT | NOT NULL, DEFAULT 1 | 状态 | | pwd_reset_required | SMALLINT | DEFAULT 1 | 首次登录是否需改密 | | is_deleted | SMALLINT | NOT NULL, DEFAULT 0 | 逻辑删除标记 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | | is_platform_admin | BOOLEAN | DEFAULT false | 是否平台管理员 | 索引: - `uk_user_username`:`UNIQUE (username) WHERE is_deleted = FALSE` ### 1.2 `sys_role`(角色表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | role_id | BIGSERIAL | PK | 角色ID | | tenant_id | BIGINT | | 租户ID | | role_code | VARCHAR(50) | NOT NULL, UNIQUE | 角色编码 | | role_name | VARCHAR(50) | NOT NULL | 角色名称 | | status | SMALLINT | NOT NULL, DEFAULT 1 | 状态 | | remark | TEXT | | 备注 | | is_deleted | SMALLINT | NOT NULL, DEFAULT 0 | 逻辑删除标记 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | 索引: - `idx_sys_role_tenant`:`(tenant_id)` - `uk_role_code`:`UNIQUE (tenant_id, role_code) WHERE is_deleted = FALSE` ### 1.3 `sys_user_role`(用户-角色关联表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 关联ID | | tenant_id | BIGINT | | 租户ID | | user_id | BIGINT | NOT NULL | 用户ID | | role_id | BIGINT | NOT NULL | 角色ID | | is_deleted | SMALLINT | NOT NULL, DEFAULT 0 | 逻辑删除标记 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | 唯一约束: - `UNIQUE (user_id, role_id)` ### 1.4 `sys_tenant_user`(租户成员关联表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 关联ID | | user_id | BIGINT | NOT NULL | 用户ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | org_id | BIGINT | | 组织ID | | status | SMALLINT | DEFAULT 1 | 状态 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除标记 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | 索引: - `uk_tenant_user`:`UNIQUE (user_id, tenant_id) WHERE is_deleted = 0` ## 2. 权限/字典/参数(全局共享) ### 2.1 `sys_permission`(权限表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | perm_id | BIGSERIAL | PK | 权限ID | | parent_id | BIGINT | | 父级权限ID | | name | VARCHAR(100) | NOT NULL | 权限名称 | | code | VARCHAR(100) | NOT NULL, UNIQUE | 权限编码 | | perm_type | VARCHAR(20) | NOT NULL | 权限类型 | | level | INTEGER | NOT NULL | 层级 | | path | VARCHAR(255) | | 路径 | | component | VARCHAR(255) | | 组件 | | icon | VARCHAR(100) | | 图标 | | sort_order | INTEGER | NOT NULL, DEFAULT 0 | 排序 | | is_visible | SMALLINT | NOT NULL, DEFAULT 1 | 是否可见 | | status | SMALLINT | NOT NULL, DEFAULT 1 | 状态 | | description | TEXT | | 描述 | | meta | JSONB | | 扩展信息 | | is_deleted | SMALLINT | NOT NULL, DEFAULT 0 | 逻辑删除标记 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | ### 2.2 `sys_dict_type`(字典类型表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | dict_type_id | BIGSERIAL | PK | 类型ID | | type_code | VARCHAR(50) | NOT NULL, UNIQUE | 类型编码 | | type_name | VARCHAR(50) | NOT NULL | 类型名称 | | status | SMALLINT | DEFAULT 1 | 状态 | | remark | TEXT | | 备注 | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | | updated_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除标记 | **初始化数据:** - `sys_common_status`: 通用状态 (启用/禁用) - `sys_permission_type`: 权限类型 (目录/菜单/按钮) - `sys_common_visibility`: 可见性 (显示/隐藏) - `sys_permission_level`: 权限层级 (1, 2, 3) - `sys_log_type`: 日志类型 (LOGIN/OPERATION) - `sys_param_type`: 参数类型 (String/Number/Boolean/JSON) - `sys_log_status`: 操作状态 (成功/失败) ### 2.3 `sys_dict_item`(字典项表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | dict_item_id | BIGSERIAL | PK | 字典项ID | | type_code | VARCHAR(50) | NOT NULL | 字典类型编码 | | item_label | VARCHAR(100) | NOT NULL | 展示文本 | | item_value | VARCHAR(100) | NOT NULL | 存储值 | | sort_order | INT | DEFAULT 0 | 排序 | | status | SMALLINT | DEFAULT 1 | 状态 | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | | updated_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除标记 | 索引: - `idx_dict_item_type`:`(type_code)` - `uk_dict_item_value`:`UNIQUE (type_code, item_value)` ### 2.4 `sys_param`(系统参数表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 参数ID | | param_key | VARCHAR(100) | NOT NULL, UNIQUE | 参数键 | | param_value | TEXT | NOT NULL | 参数值 | | param_type | VARCHAR(20) | NOT NULL | 参数类型 | | is_system | SMALLINT | DEFAULT 0 | 是否系统内置 | | status | SMALLINT | DEFAULT 1 | 状态 | | description | TEXT | | 描述 | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | ## 3. 日志(租户隔离) ### 3.1 `sys_log`(系统日志表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 日志ID | | tenant_id | BIGINT | NOT NULL, DEFAULT 0 | 租户ID | | user_id | BIGINT | | 用户ID | | username | VARCHAR(50) | | 用户名 | | log_type | VARCHAR(20) | | 日志类型(如 LOGIN、OPERATION) | | operation | VARCHAR(100) | NOT NULL | 操作描述 | | method | VARCHAR(200) | | 方法 | | params | TEXT | | 请求参数 | | status | SMALLINT | DEFAULT 1 | 状态 | | ip | VARCHAR(50) | | IP | | duration | BIGINT | | 耗时(ms) | | created_at | TIMESTAMP | NOT NULL, DEFAULT NOW() | 创建时间 | 索引: - `idx_log_tenant_type`:`(tenant_id, log_type, created_at)` ## 4. 平台配置 ### 4.1 `sys_platform_config`(平台管理表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGINT | PK | 固定为 1 | | project_name | VARCHAR(128) | NOT NULL | 项目名称 | | logo_url | VARCHAR(512) | | Logo URL | | icon_url | VARCHAR(512) | | Icon URL | | login_bg_url | VARCHAR(512) | | 登录页背景 | | icp_info | VARCHAR(128) | | 备案信息 | | copyright_info | VARCHAR(255) | | 版权信息 | | system_description | TEXT | | 系统描述 | | created_at | TIMESTAMP | NOT NULL | 创建时间 | | updated_at | TIMESTAMP | NOT NULL | 更新时间 | ## 5. 业务模块 ### 5.1 `biz_speakers`(声纹发言人表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | user_id | BIGINT | | 关联系统用户ID | | name | VARCHAR(100) | NOT NULL | 发言人姓名 | | voice_path | VARCHAR(512) | | 原始文件路径 | | voice_ext | VARCHAR(10) | | 文件后缀 | | voice_size | BIGINT | | 文件大小 | | status | SMALLINT | DEFAULT 1 | 状态 (1:已保存, 2:注册中, 3:已注册) | | embedding | VECTOR | | 声纹特征向量 | | remark | TEXT | | 备注 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除 | 索引: - `idx_speaker_tenant`: `(tenant_id)` - `idx_speaker_user`: `(user_id) WHERE is_deleted = 0` ### 5.2 `biz_hot_words`(热词管理表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | word | VARCHAR(100) | NOT NULL | 热词原文 | | pinyin_list | JSONB | | 拼音数组 | | match_strategy | SMALLINT | DEFAULT 1 | 匹配策略 (1:精确, 2:模糊) | | category | VARCHAR(50) | | 类别 (人名、术语等) | | weight | INTEGER | DEFAULT 10 | 权重 (1-100) | | status | SMALLINT | DEFAULT 1 | 状态 (1:启用, 0:禁用) | | is_synced | SMALLINT | DEFAULT 0 | 已同步第三方标记 | | remark | TEXT | | 备注 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除 | 索引: - `idx_hotword_tenant`: `(tenant_id)` - `idx_hotword_word`: `(word) WHERE is_deleted = 0` ### 5.3 `biz_prompt_templates`(提示词模板表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | template_name | VARCHAR(100) | NOT NULL | 模板名称 | | category | VARCHAR(20) | | 分类 (字典: biz_prompt_category) | | is_system | SMALLINT | DEFAULT 0 | 是否预置 (1:是, 0:否) | | creator_id | BIGINT | | 创建人ID | | tags | JSONB | | 标签数组 | | usage_count | INTEGER | DEFAULT 0 | 使用次数 | | prompt_content | TEXT | NOT NULL | 提示词内容 | | status | SMALLINT | DEFAULT 1 | 状态 (1:启用, 0:禁用) | | remark | VARCHAR(255) | | 备注 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除 | 索引: - `idx_prompt_tenant`: `(tenant_id)` - `idx_prompt_system`: `(is_system) WHERE is_deleted = 0` ### 5.4 `biz_ai_models`(AI 模型管理表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | model_type | VARCHAR(20) | NOT NULL | ASR (语音) 或 LLM (总结) | | model_name | VARCHAR(100) | NOT NULL | 自定义名称 | | provider | VARCHAR(50) | | 提供商 (Aliyun, OpenAI等) | | base_url | VARCHAR(255) | | 基础请求地址 | | model_code | VARCHAR(100) | | 模型代码 | | ws_url | VARCHAR(255) | | WebSocket 地址 (ASR) | | temperature | DECIMAL | DEFAULT 0.7 | 随机性 (LLM) | | media_config | JSONB | | 采样率、协议等 | | is_default | SMALLINT | DEFAULT 0 | 默认模型标记 | | status | SMALLINT | DEFAULT 1 | 启用状态 | | created_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 创建时间 | | updated_at | TIMESTAMP(6) | NOT NULL, DEFAULT now() | 更新时间 | | is_deleted | SMALLINT | DEFAULT 0 | 逻辑删除 | 索引: - `idx_aimodel_tenant`: `(tenant_id)` - `idx_aimodel_type`: `(model_type, is_default) WHERE is_deleted = 0` ### 5.5 `biz_meetings`(会议主表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | tenant_id | BIGINT | NOT NULL | 租户ID | | title | VARCHAR(200) | NOT NULL | 会议标题 | | asr_model_id | BIGINT | | 使用的 ASR 模型 | | summary_model_id | BIGINT | | 使用的 LLM 模型 | | prompt_content | TEXT | | **[快照]** 发起任务时的提示词模板内容 | | summary_content | TEXT | | **[固化]** 最终生成的 Markdown 总结内容 | | status | SMALLINT | DEFAULT 0 | 0:待处理, 1:识别中, 2:总结中, 3:已完成, 4:失败 | ### 5.6 `biz_meeting_transcripts`(转录明细表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | meeting_id | BIGINT | NOT NULL | 关联会议ID | | speaker_label | VARCHAR(50) | | 发言人标签 | | content | TEXT | | 转录文字 | | start_time | INTEGER | | 开始时间 (ms) | ### 5.7 `biz_ai_tasks`(AI 任务流水表) | 字段 | 类型 | 约束 | 说明 | | --- | --- | --- | --- | | id | BIGSERIAL | PK | 主键ID | | task_type | VARCHAR(20) | | ASR / SUMMARY | | request_data | JSONB | | 请求原始数据 | | response_data | JSONB | | 响应原始数据 | | status | SMALLINT | | 0:排队, 1:处理中, 2:成功, 3:失败 |