-- AIHR 知识反馈与知识缺口日志迁移(MySQL 8.x) -- 补齐生产不能依赖运行时懒建表的两张治理表;不写入业务数据,可重复执行。 CREATE TABLE IF NOT EXISTS `aihr_knowledge_gap` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `query_text` varchar(1000) NOT NULL COMMENT '未命中问题', `category` varchar(100) DEFAULT NULL COMMENT '知识分类', `position` varchar(80) DEFAULT NULL COMMENT '岗位', `source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源', `status` varchar(30) DEFAULT '待补充' COMMENT '状态', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`), KEY `idx_aihr_knowledge_gap_status` (`tenant_id`, `status`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识缺口日志'; CREATE TABLE IF NOT EXISTS `aihr_knowledge_answer_feedback` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '主键', `tenant_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '000000' COMMENT '租户编号', `query_text` varchar(1000) NOT NULL COMMENT '问题原文', `query_norm` varchar(500) NOT NULL COMMENT '规范化问题', `fragment_id` bigint NOT NULL COMMENT '知识片段ID', `verdict` varchar(10) NOT NULL COMMENT '反馈: up/down', `feedback_reason_codes` varchar(255) DEFAULT NULL COMMENT '未解决原因代码', `feedback_comment` varchar(500) DEFAULT NULL COMMENT '未解决补充说明', `category` varchar(100) DEFAULT NULL COMMENT '知识分类', `position` varchar(80) DEFAULT NULL COMMENT '岗位', `source` varchar(50) DEFAULT 'knowledge_search' COMMENT '来源', `review_id` bigint DEFAULT NULL COMMENT '对应SOP问答评审ID', `review_status` varchar(30) DEFAULT '待复核' COMMENT '复核状态', `reviewer` varchar(100) DEFAULT NULL COMMENT '复核人', `reviewed_time` datetime DEFAULT NULL COMMENT '复核时间', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_time` datetime DEFAULT NULL COMMENT '更新时间', PRIMARY KEY (`id`), UNIQUE KEY `uk_aihr_answer_feedback_pair` (`tenant_id`, `query_norm`, `fragment_id`), KEY `idx_aihr_answer_feedback_verdict` (`tenant_id`, `query_norm`, `fragment_id`, `verdict`), KEY `idx_aihr_answer_feedback_review` (`tenant_id`, `review_status`, `create_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='AI HR 知识答案反馈'; SET @aihr_feedback_table_exists := ( SELECT COUNT(*) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' ); SET @aihr_feedback_review_id_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' AND COLUMN_NAME = 'review_id' ); SET @aihr_feedback_review_id_ddl := IF( @aihr_feedback_table_exists = 1 AND @aihr_feedback_review_id_exists = 0, 'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `review_id` bigint DEFAULT NULL COMMENT ''对应SOP问答评审ID'' AFTER `source`', 'SELECT 1' ); PREPARE aihr_feedback_review_id_stmt FROM @aihr_feedback_review_id_ddl; EXECUTE aihr_feedback_review_id_stmt; DEALLOCATE PREPARE aihr_feedback_review_id_stmt; SET @aihr_feedback_reason_codes_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' AND COLUMN_NAME = 'feedback_reason_codes' ); SET @aihr_feedback_reason_codes_ddl := IF( @aihr_feedback_table_exists = 1 AND @aihr_feedback_reason_codes_exists = 0, 'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `feedback_reason_codes` varchar(255) DEFAULT NULL COMMENT ''未解决原因代码'' AFTER `verdict`', 'SELECT 1' ); PREPARE aihr_feedback_reason_codes_stmt FROM @aihr_feedback_reason_codes_ddl; EXECUTE aihr_feedback_reason_codes_stmt; DEALLOCATE PREPARE aihr_feedback_reason_codes_stmt; SET @aihr_feedback_comment_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' AND COLUMN_NAME = 'feedback_comment' ); SET @aihr_feedback_comment_ddl := IF( @aihr_feedback_table_exists = 1 AND @aihr_feedback_comment_exists = 0, 'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `feedback_comment` varchar(500) DEFAULT NULL COMMENT ''未解决补充说明'' AFTER `feedback_reason_codes`', 'SELECT 1' ); PREPARE aihr_feedback_comment_stmt FROM @aihr_feedback_comment_ddl; EXECUTE aihr_feedback_comment_stmt; DEALLOCATE PREPARE aihr_feedback_comment_stmt; SET @aihr_feedback_reviewer_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' AND COLUMN_NAME = 'reviewer' ); SET @aihr_feedback_reviewer_ddl := IF( @aihr_feedback_table_exists = 1 AND @aihr_feedback_reviewer_exists = 0, 'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `reviewer` varchar(100) DEFAULT NULL COMMENT ''复核人'' AFTER `review_status`', 'SELECT 1' ); PREPARE aihr_feedback_reviewer_stmt FROM @aihr_feedback_reviewer_ddl; EXECUTE aihr_feedback_reviewer_stmt; DEALLOCATE PREPARE aihr_feedback_reviewer_stmt; SET @aihr_feedback_reviewed_time_exists := ( SELECT COUNT(*) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'aihr_knowledge_answer_feedback' AND COLUMN_NAME = 'reviewed_time' ); SET @aihr_feedback_reviewed_time_ddl := IF( @aihr_feedback_table_exists = 1 AND @aihr_feedback_reviewed_time_exists = 0, 'ALTER TABLE aihr_knowledge_answer_feedback ADD COLUMN `reviewed_time` datetime DEFAULT NULL COMMENT ''复核时间'' AFTER `reviewer`', 'SELECT 1' ); PREPARE aihr_feedback_reviewed_time_stmt FROM @aihr_feedback_reviewed_time_ddl; EXECUTE aihr_feedback_reviewed_time_stmt; DEALLOCATE PREPARE aihr_feedback_reviewed_time_stmt;