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

644 lines
34 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

-- 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`;