12 KiB
12 KiB
数据库结构文档(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 | 显示名 |
| 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:否) |
| 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