imetting/backend/sql/imeeting-schema-latest.sql

644 lines
34 KiB
MySQL
Raw Normal View History

2026-04-13 06:55:33 +00:00
-- iMeeting latest schema initialization script
-- 用途:
-- 1. 面向当前最新代码结构的全新部署
-- 2. 不再兼容或保留旧 users / roles / menus 等历史结构
-- 3. 仅负责建表,不写入基础角色/用户/菜单/参数等种子数据
-- 4. 本文件即为全量建表入口,无需执行历史 migrations 目录脚本
--
-- 执行顺序:
-- 1. 先执行本文件
-- 2. 再执行 imeeting-seed-latest.sql
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- 兼容旧迁移中创建的 legacy views
DROP VIEW IF EXISTS `users`;
DROP VIEW IF EXISTS `roles`;
DROP VIEW IF EXISTS `menus`;
DROP VIEW IF EXISTS `role_menu_permissions`;
DROP VIEW IF EXISTS `dict_data`;
DROP VIEW IF EXISTS `system_parameters`;
-- 清理旧结构与当前结构
DROP TABLE IF EXISTS `sys_role_menu_permissions`;
DROP TABLE IF EXISTS `prompt_config`;
DROP TABLE IF EXISTS `sys_user_mcp`;
DROP TABLE IF EXISTS `user_logs`;
DROP TABLE IF EXISTS `user_voiceprint`;
DROP TABLE IF EXISTS `client_downloads`;
DROP TABLE IF EXISTS `external_apps`;
DROP TABLE IF EXISTS `terminals`;
DROP TABLE IF EXISTS `knowledge_base_tasks`;
DROP TABLE IF EXISTS `knowledge_bases`;
DROP TABLE IF EXISTS `llm_tasks`;
DROP TABLE IF EXISTS `transcript_segments`;
DROP TABLE IF EXISTS `transcript_tasks`;
DROP TABLE IF EXISTS `audio_files`;
DROP TABLE IF EXISTS `attachments`;
DROP TABLE IF EXISTS `attendees`;
DROP TABLE IF EXISTS `meetings`;
DROP TABLE IF EXISTS `tags`;
DROP TABLE IF EXISTS `prompts`;
DROP TABLE IF EXISTS `audio_model_config`;
DROP TABLE IF EXISTS `llm_model_config`;
DROP TABLE IF EXISTS `hot_word_item`;
DROP TABLE IF EXISTS `hot_word_group`;
DROP TABLE IF EXISTS `sys_system_parameters`;
DROP TABLE IF EXISTS `sys_dict_data`;
DROP TABLE IF EXISTS `sys_menus`;
DROP TABLE IF EXISTS `sys_users`;
DROP TABLE IF EXISTS `sys_roles`;
-- 历史阶段遗留表,一并清理
DROP TABLE IF EXISTS `meeting_summaries`;
DROP TABLE IF EXISTS `sys_user_prompt_config`;
DROP TABLE IF EXISTS `ai_model_configs`;
DROP TABLE IF EXISTS `ai_model_config`;
DROP TABLE IF EXISTS `llm_model_configs`;
DROP TABLE IF EXISTS `audio_model_configs`;
DROP TABLE IF EXISTS `hot_words`;
DROP TABLE IF EXISTS `system_parameters`;
DROP TABLE IF EXISTS `dict_data`;
DROP TABLE IF EXISTS `role_menu_permissions`;
DROP TABLE IF EXISTS `menus`;
DROP TABLE IF EXISTS `users`;
DROP TABLE IF EXISTS `roles`;
SET FOREIGN_KEY_CHECKS = 1;
-- =====================================================================
-- 1. 基础系统表
-- =====================================================================
CREATE TABLE `sys_roles` (
`role_id` INT NOT NULL AUTO_INCREMENT,
`role_name` VARCHAR(50) NOT NULL COMMENT '角色名称',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`role_id`),
UNIQUE KEY `uk_sys_roles_name` (`role_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统角色表';
CREATE TABLE `sys_users` (
`user_id` INT NOT NULL AUTO_INCREMENT,
`username` VARCHAR(50) NOT NULL COMMENT '登录账号',
`caption` VARCHAR(50) NOT NULL COMMENT '显示名称',
`email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱,可为空',
`avatar_url` VARCHAR(255) DEFAULT NULL COMMENT '头像地址',
`password_hash` VARCHAR(255) NOT NULL COMMENT '密码哈希',
`role_id` INT NOT NULL DEFAULT 2 COMMENT '角色ID',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`user_id`),
UNIQUE KEY `uk_sys_users_username` (`username`),
UNIQUE KEY `uk_sys_users_email` (`email`),
KEY `idx_sys_users_role_id` (`role_id`),
KEY `idx_sys_users_created_at` (`created_at`),
CONSTRAINT `fk_sys_users_role_id`
FOREIGN KEY (`role_id`) REFERENCES `sys_roles` (`role_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统用户表';
CREATE TABLE `sys_menus` (
`menu_id` INT NOT NULL AUTO_INCREMENT,
`menu_code` VARCHAR(50) NOT NULL COMMENT '菜单编码',
`menu_name` VARCHAR(100) NOT NULL COMMENT '菜单名称',
`menu_icon` VARCHAR(100) DEFAULT NULL COMMENT '菜单图标',
`menu_url` VARCHAR(255) DEFAULT NULL COMMENT '前端路由',
`menu_type` ENUM('action', 'link', 'divider') NOT NULL DEFAULT 'link' COMMENT '菜单类型',
`parent_id` INT DEFAULT NULL COMMENT '父菜单ID',
`menu_level` TINYINT NOT NULL DEFAULT 1 COMMENT '菜单层级根节点为1',
`tree_path` VARCHAR(255) DEFAULT NULL COMMENT '树路径(如 /1/5',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序号',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`is_visible` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否在侧边栏显示',
`description` VARCHAR(255) DEFAULT NULL COMMENT '菜单说明',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`menu_id`),
UNIQUE KEY `uk_sys_menus_code` (`menu_code`),
KEY `idx_sys_menus_parent_id` (`parent_id`),
KEY `idx_sys_menus_menu_level` (`menu_level`),
KEY `idx_sys_menus_tree_path` (`tree_path`),
KEY `idx_sys_menus_is_active` (`is_active`),
KEY `idx_sys_menus_is_visible` (`is_visible`),
CONSTRAINT `fk_sys_menus_parent_id`
FOREIGN KEY (`parent_id`) REFERENCES `sys_menus` (`menu_id`)
ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统菜单表';
CREATE TABLE `sys_dict_data` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`dict_type` VARCHAR(64) NOT NULL DEFAULT 'client_platform' COMMENT '字典类型',
`dict_code` VARCHAR(64) NOT NULL COMMENT '业务编码',
`parent_code` VARCHAR(64) NOT NULL DEFAULT 'ROOT' COMMENT '父级编码',
`tree_path` VARCHAR(255) DEFAULT NULL COMMENT '树路径',
`label_cn` VARCHAR(128) NOT NULL COMMENT '中文名称',
`label_en` VARCHAR(128) DEFAULT NULL COMMENT '英文名称',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`extension_attr` LONGTEXT DEFAULT NULL COMMENT '扩展属性(JSON字符串)',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_sys_dict_data_type_code` (`dict_type`, `dict_code`),
KEY `idx_sys_dict_data_type_parent` (`dict_type`, `parent_code`),
KEY `idx_sys_dict_data_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统字典数据表';
CREATE TABLE `sys_system_parameters` (
`param_id` BIGINT NOT NULL AUTO_INCREMENT,
`param_key` VARCHAR(128) NOT NULL COMMENT '参数键',
`param_name` VARCHAR(255) NOT NULL COMMENT '参数名称',
`param_value` TEXT DEFAULT NULL COMMENT '参数值',
`value_type` VARCHAR(32) NOT NULL DEFAULT 'string' COMMENT '值类型',
`category` VARCHAR(64) NOT NULL DEFAULT 'system' COMMENT '参数分类',
`description` VARCHAR(500) DEFAULT NULL COMMENT '参数说明',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`param_id`),
UNIQUE KEY `uk_sys_system_parameters_key` (`param_key`),
KEY `idx_sys_system_parameters_category` (`category`),
KEY `idx_sys_system_parameters_active` (`is_active`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统参数表';
CREATE TABLE `hot_word_group` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL COMMENT '热词组名称',
`description` VARCHAR(500) DEFAULT NULL COMMENT '描述',
`vocabulary_id` VARCHAR(255) DEFAULT NULL COMMENT '阿里云词表ID',
`last_sync_time` DATETIME DEFAULT NULL COMMENT '最后同步时间',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_hot_word_group_name` (`name`),
KEY `idx_hot_word_group_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='热词组主表';
CREATE TABLE `llm_model_config` (
`config_id` BIGINT NOT NULL AUTO_INCREMENT,
`model_code` VARCHAR(128) NOT NULL COMMENT '模型编码',
`model_name` VARCHAR(255) NOT NULL COMMENT '模型名称',
`provider` VARCHAR(64) DEFAULT NULL COMMENT '供应商',
`endpoint_url` VARCHAR(512) DEFAULT NULL COMMENT '模型接口地址',
`api_key` VARCHAR(512) DEFAULT NULL COMMENT '接口密钥',
`llm_model_name` VARCHAR(128) NOT NULL COMMENT '供应商模型名',
`llm_timeout` INT NOT NULL DEFAULT 120 COMMENT '超时时间(秒)',
`llm_temperature` DECIMAL(5,2) NOT NULL DEFAULT 0.70 COMMENT 'temperature',
`llm_top_p` DECIMAL(5,2) NOT NULL DEFAULT 0.90 COMMENT 'top_p',
`llm_max_tokens` INT NOT NULL DEFAULT 2048 COMMENT '最大token数',
`llm_system_prompt` TEXT DEFAULT NULL COMMENT '系统提示词',
`description` VARCHAR(500) DEFAULT NULL COMMENT '说明',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`config_id`),
UNIQUE KEY `uk_llm_model_config_code` (`model_code`),
KEY `idx_llm_model_config_active` (`is_active`),
KEY `idx_llm_model_config_default` (`is_default`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='LLM模型配置表';
CREATE TABLE `audio_model_config` (
`config_id` BIGINT NOT NULL AUTO_INCREMENT,
`model_code` VARCHAR(128) NOT NULL COMMENT '模型编码',
`model_name` VARCHAR(255) NOT NULL COMMENT '模型名称',
`audio_scene` VARCHAR(32) NOT NULL COMMENT 'asr / voiceprint',
`provider` VARCHAR(64) DEFAULT NULL COMMENT '供应商',
`endpoint_url` VARCHAR(512) DEFAULT NULL COMMENT '接口地址',
`api_key` VARCHAR(512) DEFAULT NULL COMMENT '接口密钥',
`request_timeout_seconds` INT NOT NULL DEFAULT 300 COMMENT '请求超时(秒)',
`hot_word_group_id` INT DEFAULT NULL COMMENT '关联热词组',
`extra_config` JSON DEFAULT NULL COMMENT '音频模型差异化配置',
`description` VARCHAR(500) DEFAULT NULL COMMENT '说明',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`config_id`),
UNIQUE KEY `uk_audio_model_config_code` (`model_code`),
KEY `idx_audio_model_config_scene` (`audio_scene`),
KEY `idx_audio_model_config_active` (`is_active`),
KEY `idx_audio_model_config_default` (`is_default`),
KEY `idx_audio_model_config_hot_word_group_id` (`hot_word_group_id`),
CONSTRAINT `fk_audio_model_config_hot_word_group_id`
FOREIGN KEY (`hot_word_group_id`) REFERENCES `hot_word_group` (`id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='音频模型配置表';
CREATE TABLE `hot_word_item` (
`id` INT NOT NULL AUTO_INCREMENT,
`group_id` INT NOT NULL COMMENT '热词组ID',
`text` VARCHAR(255) NOT NULL COMMENT '热词内容',
`weight` INT NOT NULL DEFAULT 4 COMMENT '权重',
`lang` VARCHAR(20) NOT NULL DEFAULT 'zh' COMMENT '语言',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态',
`create_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_hot_word_item_group_text` (`group_id`, `text`),
KEY `idx_hot_word_item_group_id` (`group_id`),
KEY `idx_hot_word_item_status` (`status`),
CONSTRAINT `fk_hot_word_item_group_id`
FOREIGN KEY (`group_id`) REFERENCES `hot_word_group` (`id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='热词条目表';
CREATE TABLE `prompts` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL COMMENT '提示词名称',
`task_type` ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL COMMENT '任务类型',
`content` LONGTEXT NOT NULL COMMENT '提示词内容',
`desc` VARCHAR(500) DEFAULT NULL COMMENT '模版简介',
`is_default` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否默认',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`creator_id` INT NOT NULL COMMENT '创建者',
`is_system` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否系统模版',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_prompts_creator_id` (`creator_id`),
KEY `idx_prompts_task_scope_active` (`task_type`, `is_system`, `creator_id`, `is_active`, `is_default`),
CONSTRAINT `fk_prompts_creator_id`
FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提示词模版表';
CREATE TABLE `prompt_config` (
`config_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '用户ID',
`task_type` ENUM('MEETING_TASK', 'KNOWLEDGE_TASK') NOT NULL COMMENT '任务类型',
`prompt_id` INT NOT NULL COMMENT '模版ID',
`is_enabled` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`config_id`),
UNIQUE KEY `uk_prompt_config_user_task_prompt` (`user_id`, `task_type`, `prompt_id`),
KEY `idx_prompt_config_user_task_order` (`user_id`, `task_type`, `sort_order`),
KEY `idx_prompt_config_prompt_id` (`prompt_id`),
CONSTRAINT `fk_prompt_config_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_prompt_config_prompt_id`
FOREIGN KEY (`prompt_id`) REFERENCES `prompts` (`id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户提示词配置表';
CREATE TABLE `sys_role_menu_permissions` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`role_id` INT NOT NULL COMMENT '角色ID',
`menu_id` INT NOT NULL COMMENT '菜单ID',
`granted_by` INT DEFAULT NULL COMMENT '授权人ID',
`granted_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '授权时间',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_sys_role_menu_permissions_role_menu` (`role_id`, `menu_id`),
KEY `idx_sys_role_menu_permissions_role_id` (`role_id`),
KEY `idx_sys_role_menu_permissions_menu_id` (`menu_id`),
KEY `idx_sys_role_menu_permissions_granted_by` (`granted_by`),
KEY `idx_sys_role_menu_permissions_granted_at` (`granted_at`),
CONSTRAINT `fk_sys_role_menu_permissions_role_id`
FOREIGN KEY (`role_id`) REFERENCES `sys_roles` (`role_id`)
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_sys_role_menu_permissions_menu_id`
FOREIGN KEY (`menu_id`) REFERENCES `sys_menus` (`menu_id`)
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_sys_role_menu_permissions_granted_by`
FOREIGN KEY (`granted_by`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色菜单授权表';
CREATE TABLE `sys_user_mcp` (
`id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '用户ID',
`bot_id` VARCHAR(64) NOT NULL COMMENT '机器人ID',
`bot_secret` VARCHAR(128) NOT NULL COMMENT '机器人密钥',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '状态',
`last_used_at` DATETIME DEFAULT NULL COMMENT '最后使用时间',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_sys_user_mcp_user_id` (`user_id`),
UNIQUE KEY `uk_sys_user_mcp_bot_id` (`bot_id`),
KEY `idx_sys_user_mcp_status` (`status`),
CONSTRAINT `fk_sys_user_mcp_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户MCP接入凭证表';
-- =====================================================================
-- 2. 业务表
-- =====================================================================
CREATE TABLE `tags` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(255) NOT NULL COMMENT '标签名称',
`color` VARCHAR(7) NOT NULL DEFAULT '#409EFF' COMMENT '标签颜色',
`creator_id` INT DEFAULT NULL COMMENT '创建人',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_tags_name` (`name`),
KEY `idx_tags_creator_id` (`creator_id`),
CONSTRAINT `fk_tags_creator_id`
FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='标签表';
CREATE TABLE `meetings` (
`meeting_id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '创建人',
`title` VARCHAR(255) NOT NULL COMMENT '会议标题',
`tags` VARCHAR(255) DEFAULT NULL COMMENT '逗号分隔标签',
`meeting_time` DATETIME DEFAULT NULL COMMENT '会议时间',
`access_password` VARCHAR(32) DEFAULT NULL COMMENT '访问密码',
`prompt_id` INT DEFAULT 0 COMMENT '选用提示词ID0表示未指定',
`user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示',
`summary` LONGTEXT DEFAULT NULL COMMENT '会议总结',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`meeting_id`),
KEY `idx_meetings_user_id` (`user_id`),
KEY `idx_meetings_meeting_time` (`meeting_time`),
KEY `idx_meetings_created_at` (`created_at`),
KEY `idx_meetings_prompt_id` (`prompt_id`),
CONSTRAINT `fk_meetings_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议表';
CREATE TABLE `attendees` (
`attendee_id` INT NOT NULL AUTO_INCREMENT,
`meeting_id` INT NOT NULL COMMENT '会议ID',
`user_id` INT NOT NULL COMMENT '参会用户ID',
PRIMARY KEY (`attendee_id`),
UNIQUE KEY `uk_attendees_meeting_user` (`meeting_id`, `user_id`),
KEY `idx_attendees_meeting_id` (`meeting_id`),
KEY `idx_attendees_user_id` (`user_id`),
CONSTRAINT `fk_attendees_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_attendees_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议参会人表';
CREATE TABLE `attachments` (
`attachment_id` INT NOT NULL AUTO_INCREMENT,
`meeting_id` INT NOT NULL COMMENT '会议ID',
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名',
`file_path` VARCHAR(512) NOT NULL COMMENT '文件路径',
`file_type` VARCHAR(100) DEFAULT NULL COMMENT '文件类型',
`uploaded_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
PRIMARY KEY (`attachment_id`),
KEY `idx_attachments_meeting_id` (`meeting_id`),
CONSTRAINT `fk_attachments_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议附件表';
CREATE TABLE `audio_files` (
`audio_id` INT NOT NULL AUTO_INCREMENT,
`meeting_id` INT NOT NULL COMMENT '会议ID',
`file_path` VARCHAR(512) NOT NULL COMMENT '音频相对路径',
`file_name` VARCHAR(255) DEFAULT NULL COMMENT '原始文件名',
`file_size` BIGINT DEFAULT NULL COMMENT '文件大小(字节)',
`duration` DECIMAL(10,2) DEFAULT NULL COMMENT '音频时长(秒)',
`upload_time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '上传时间',
`processing_status` VARCHAR(20) NOT NULL DEFAULT 'uploaded' COMMENT '处理状态',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`task_id` VARCHAR(255) DEFAULT NULL COMMENT '最新转写任务ID',
PRIMARY KEY (`audio_id`),
UNIQUE KEY `uk_audio_files_meeting_id` (`meeting_id`),
KEY `idx_audio_files_task_id` (`task_id`),
KEY `idx_audio_files_processing_status` (`processing_status`),
CONSTRAINT `fk_audio_files_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议音频表';
CREATE TABLE `transcript_tasks` (
`task_id` VARCHAR(100) NOT NULL COMMENT '业务任务ID',
`paraformer_task_id` VARCHAR(100) DEFAULT NULL COMMENT '云端任务ID',
`meeting_id` INT NOT NULL COMMENT '会议ID',
`status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态',
`progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
PRIMARY KEY (`task_id`),
KEY `idx_transcript_tasks_meeting_id` (`meeting_id`),
KEY `idx_transcript_tasks_status` (`status`),
KEY `idx_transcript_tasks_created_at` (`created_at`),
KEY `idx_transcript_tasks_paraformer_task_id` (`paraformer_task_id`),
CONSTRAINT `fk_transcript_tasks_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转写任务表';
CREATE TABLE `transcript_segments` (
`segment_id` BIGINT NOT NULL AUTO_INCREMENT,
`meeting_id` INT NOT NULL COMMENT '会议ID',
`speaker_id` INT NOT NULL DEFAULT 0 COMMENT '说话人编号',
`speaker_tag` VARCHAR(50) DEFAULT NULL COMMENT '说话人标签',
`start_time_ms` INT NOT NULL COMMENT '开始时间(毫秒)',
`end_time_ms` INT NOT NULL COMMENT '结束时间(毫秒)',
`text_content` LONGTEXT NOT NULL COMMENT '转写文本',
PRIMARY KEY (`segment_id`),
KEY `idx_transcript_segments_meeting_id` (`meeting_id`),
KEY `idx_transcript_segments_speaker_id` (`speaker_id`),
KEY `idx_transcript_segments_start_time_ms` (`start_time_ms`),
CONSTRAINT `fk_transcript_segments_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='转写分段表';
CREATE TABLE `llm_tasks` (
`task_id` VARCHAR(100) NOT NULL COMMENT '总结任务ID',
`meeting_id` INT NOT NULL COMMENT '会议ID',
`user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示',
`prompt_id` INT DEFAULT NULL COMMENT '使用的模版ID',
`model_code` VARCHAR(128) DEFAULT NULL COMMENT '使用的模型编码',
`status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态',
`progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度',
`result` LONGTEXT DEFAULT NULL COMMENT '总结结果',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`task_id`),
KEY `idx_llm_tasks_meeting_id` (`meeting_id`),
KEY `idx_llm_tasks_status` (`status`),
KEY `idx_llm_tasks_created_at` (`created_at`),
KEY `idx_llm_tasks_prompt_id` (`prompt_id`),
KEY `idx_llm_tasks_model_code` (`model_code`),
CONSTRAINT `fk_llm_tasks_meeting_id`
FOREIGN KEY (`meeting_id`) REFERENCES `meetings` (`meeting_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='会议总结任务表';
CREATE TABLE `knowledge_bases` (
`kb_id` INT NOT NULL AUTO_INCREMENT,
`title` VARCHAR(255) NOT NULL COMMENT '知识标题',
`prompt_id` INT DEFAULT 0 COMMENT '使用的模版ID',
`user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示',
`content` LONGTEXT DEFAULT NULL COMMENT '知识内容',
`creator_id` INT NOT NULL COMMENT '创建人',
`is_shared` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否共享',
`source_meeting_ids` VARCHAR(255) DEFAULT NULL COMMENT '来源会议ID列表',
`tags` VARCHAR(255) DEFAULT NULL COMMENT '标签',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`kb_id`),
KEY `idx_knowledge_bases_creator_id` (`creator_id`),
KEY `idx_knowledge_bases_prompt_id` (`prompt_id`),
KEY `idx_knowledge_bases_updated_at` (`updated_at`),
KEY `idx_knowledge_bases_is_shared` (`is_shared`),
CONSTRAINT `fk_knowledge_bases_creator_id`
FOREIGN KEY (`creator_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='知识库表';
CREATE TABLE `knowledge_base_tasks` (
`task_id` VARCHAR(100) NOT NULL COMMENT '知识库任务ID',
`user_id` INT NOT NULL COMMENT '发起人',
`kb_id` INT NOT NULL COMMENT '知识库ID',
`prompt_id` INT DEFAULT NULL COMMENT '使用的模版ID',
`user_prompt` TEXT DEFAULT NULL COMMENT '用户额外提示',
`status` ENUM('pending', 'processing', 'completed', 'failed') NOT NULL DEFAULT 'pending' COMMENT '任务状态',
`progress` INT NOT NULL DEFAULT 0 COMMENT '任务进度',
`error_message` TEXT DEFAULT NULL COMMENT '错误信息',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`completed_at` DATETIME DEFAULT NULL COMMENT '完成时间',
PRIMARY KEY (`task_id`),
KEY `idx_knowledge_base_tasks_user_id` (`user_id`),
KEY `idx_knowledge_base_tasks_kb_id` (`kb_id`),
KEY `idx_knowledge_base_tasks_status` (`status`),
KEY `idx_knowledge_base_tasks_created_at` (`created_at`),
CONSTRAINT `fk_knowledge_base_tasks_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `fk_knowledge_base_tasks_kb_id`
FOREIGN KEY (`kb_id`) REFERENCES `knowledge_bases` (`kb_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='知识库生成任务表';
CREATE TABLE `client_downloads` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`platform_type` VARCHAR(50) DEFAULT NULL COMMENT '平台类型(兼容字段)',
`platform_name` VARCHAR(50) DEFAULT NULL COMMENT '平台名称(兼容字段)',
`platform_code` VARCHAR(64) NOT NULL COMMENT '平台编码',
`version` VARCHAR(50) NOT NULL COMMENT '版本号',
`version_code` INT NOT NULL COMMENT '版本序号',
`download_url` VARCHAR(512) NOT NULL COMMENT '下载地址',
`file_size` BIGINT DEFAULT NULL COMMENT '文件大小',
`release_notes` TEXT DEFAULT NULL COMMENT '更新说明',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`is_latest` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否最新',
`min_system_version` VARCHAR(50) DEFAULT NULL COMMENT '最低系统版本',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_by` INT DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `idx_client_downloads_platform_code` (`platform_code`),
KEY `idx_client_downloads_platform_type_name` (`platform_type`, `platform_name`),
KEY `idx_client_downloads_is_latest` (`is_latest`),
KEY `idx_client_downloads_is_active` (`is_active`),
KEY `idx_client_downloads_platform_code_version` (`platform_code`, `version_code`),
CONSTRAINT `fk_client_downloads_created_by`
FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户端下载管理表';
CREATE TABLE `external_apps` (
`id` INT NOT NULL AUTO_INCREMENT,
`app_name` VARCHAR(100) NOT NULL COMMENT '应用名称',
`app_type` ENUM('native', 'web') NOT NULL COMMENT '应用类型',
`app_info` TEXT DEFAULT NULL COMMENT '应用信息(JSON字符串)',
`icon_url` TEXT DEFAULT NULL COMMENT '图标地址',
`description` TEXT DEFAULT NULL COMMENT '应用说明',
`sort_order` INT NOT NULL DEFAULT 0 COMMENT '排序',
`is_active` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_by` INT DEFAULT NULL COMMENT '创建人',
PRIMARY KEY (`id`),
KEY `idx_external_apps_type` (`app_type`),
KEY `idx_external_apps_active` (`is_active`),
KEY `idx_external_apps_sort_order` (`sort_order`),
KEY `idx_external_apps_type_active` (`app_type`, `is_active`),
CONSTRAINT `fk_external_apps_created_by`
FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='外部应用管理表';
CREATE TABLE `terminals` (
`id` INT NOT NULL AUTO_INCREMENT,
`imei` VARCHAR(64) NOT NULL COMMENT '终端唯一标识',
`terminal_name` VARCHAR(100) DEFAULT NULL COMMENT '终端名称',
`terminal_type` VARCHAR(50) NOT NULL COMMENT '终端类型编码',
`description` VARCHAR(500) DEFAULT NULL COMMENT '说明',
`status` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '启用状态',
`is_activated` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '激活状态',
`activated_at` DATETIME DEFAULT NULL COMMENT '激活时间',
`firmware_version` VARCHAR(50) DEFAULT NULL COMMENT '固件版本',
`last_online_at` DATETIME DEFAULT NULL COMMENT '最后在线时间',
`ip_address` VARCHAR(50) DEFAULT NULL COMMENT '最近在线IP',
`mac_address` VARCHAR(64) DEFAULT NULL COMMENT 'MAC地址',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`created_by` INT DEFAULT NULL COMMENT '创建人',
`current_user_id` INT DEFAULT NULL COMMENT '当前绑定用户',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_terminals_imei` (`imei`),
KEY `idx_terminals_terminal_type` (`terminal_type`),
KEY `idx_terminals_status` (`status`),
KEY `idx_terminals_created_by` (`created_by`),
KEY `idx_terminals_current_user_id` (`current_user_id`),
KEY `idx_terminals_last_online_at` (`last_online_at`),
CONSTRAINT `fk_terminals_created_by`
FOREIGN KEY (`created_by`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT,
CONSTRAINT `fk_terminals_current_user_id`
FOREIGN KEY (`current_user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE SET NULL ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='专用终端设备表';
CREATE TABLE `user_logs` (
`log_id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '用户ID',
`action_type` VARCHAR(50) NOT NULL COMMENT '行为类型',
`ip_address` VARCHAR(50) DEFAULT NULL COMMENT 'IP地址',
`user_agent` TEXT DEFAULT NULL COMMENT 'User-Agent',
`metadata` LONGTEXT DEFAULT NULL COMMENT '扩展元数据(JSON字符串)',
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`log_id`),
KEY `idx_user_logs_user_id` (`user_id`),
KEY `idx_user_logs_action_type` (`action_type`),
KEY `idx_user_logs_created_at` (`created_at`),
KEY `idx_user_logs_user_action` (`user_id`, `action_type`),
CONSTRAINT `fk_user_logs_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户行为日志表';
CREATE TABLE `user_voiceprint` (
`vp_id` INT NOT NULL AUTO_INCREMENT,
`user_id` INT NOT NULL COMMENT '用户ID',
`file_path` VARCHAR(255) NOT NULL COMMENT '声纹文件路径',
`file_size` BIGINT DEFAULT NULL COMMENT '文件大小',
`duration_seconds` DECIMAL(5,2) DEFAULT 10.00 COMMENT '音频时长',
`vector_data` LONGTEXT DEFAULT NULL COMMENT '声纹向量(JSON字符串)',
`collected_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '采集时间',
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (`vp_id`),
UNIQUE KEY `uk_user_voiceprint_user_id` (`user_id`),
KEY `idx_user_voiceprint_collected_at` (`collected_at`),
CONSTRAINT `fk_user_voiceprint_user_id`
FOREIGN KEY (`user_id`) REFERENCES `sys_users` (`user_id`)
ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户声纹表';
SELECT 'imeeting-schema-latest.sql executed successfully' AS `message`;