新增优化历史模块
This commit is contained in:
202
create_history_tables.sql
Normal file
202
create_history_tables.sql
Normal file
@@ -0,0 +1,202 @@
|
||||
-- 创建优化历史功能相关表
|
||||
-- 执行此脚本前请备份数据库
|
||||
|
||||
-- 1. 创建历史记录表
|
||||
CREATE TABLE IF NOT EXISTS prompt_history (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id INT NOT NULL COMMENT '用户ID',
|
||||
wx_user_id INT COMMENT '微信用户ID',
|
||||
original_input TEXT NOT NULL COMMENT '原始输入',
|
||||
generated_prompt TEXT NOT NULL COMMENT '生成的提示词',
|
||||
template_id INT COMMENT '使用的模板ID',
|
||||
template_name VARCHAR(100) COMMENT '模板名称',
|
||||
generation_time INT COMMENT '生成耗时(毫秒)',
|
||||
satisfaction_rating TINYINT COMMENT '满意度评分(1-5)',
|
||||
tags JSON COMMENT '标签列表',
|
||||
is_favorite BOOLEAN DEFAULT FALSE COMMENT '是否收藏',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_wx_user_id (wx_user_id),
|
||||
INDEX idx_created_at (created_at),
|
||||
INDEX idx_template_id (template_id),
|
||||
INDEX idx_is_favorite (is_favorite),
|
||||
INDEX idx_satisfaction_rating (satisfaction_rating)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='提示词历史记录表';
|
||||
|
||||
-- 2. 创建历史标签表
|
||||
CREATE TABLE IF NOT EXISTS history_tags (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
|
||||
history_id INT NOT NULL COMMENT '历史记录ID',
|
||||
tag_name VARCHAR(50) NOT NULL COMMENT '标签名称',
|
||||
tag_type VARCHAR(20) DEFAULT 'custom' COMMENT '标签类型',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
|
||||
FOREIGN KEY (history_id) REFERENCES prompt_history(id) ON DELETE CASCADE,
|
||||
INDEX idx_history_id (history_id),
|
||||
INDEX idx_tag_name (tag_name),
|
||||
INDEX idx_tag_type (tag_type)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='历史记录标签表';
|
||||
|
||||
-- 3. 创建用户统计表
|
||||
CREATE TABLE IF NOT EXISTS user_statistics (
|
||||
id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
|
||||
user_id INT UNIQUE NOT NULL COMMENT '用户ID',
|
||||
total_generations INT DEFAULT 0 COMMENT '总生成数',
|
||||
favorite_count INT DEFAULT 0 COMMENT '收藏数',
|
||||
avg_rating DECIMAL(3,2) DEFAULT 0.00 COMMENT '平均评分',
|
||||
last_generation_at TIMESTAMP NULL COMMENT '最后生成时间',
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
|
||||
|
||||
INDEX idx_user_id (user_id),
|
||||
INDEX idx_total_generations (total_generations),
|
||||
INDEX idx_last_generation_at (last_generation_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户统计信息表';
|
||||
|
||||
-- 4. 添加外键约束(如果存在相关表)
|
||||
-- 注意:这些外键约束是可选的,根据实际数据库结构调整
|
||||
|
||||
-- 如果存在user表,添加外键约束
|
||||
-- ALTER TABLE prompt_history ADD CONSTRAINT fk_prompt_history_user_id
|
||||
-- FOREIGN KEY (user_id) REFERENCES user(uid) ON DELETE CASCADE;
|
||||
|
||||
-- 如果存在wx_user表,添加外键约束
|
||||
-- ALTER TABLE prompt_history ADD CONSTRAINT fk_prompt_history_wx_user_id
|
||||
-- FOREIGN KEY (wx_user_id) REFERENCES wx_user(id) ON DELETE SET NULL;
|
||||
|
||||
-- 如果存在prompt_template表,添加外键约束
|
||||
-- ALTER TABLE prompt_history ADD CONSTRAINT fk_prompt_history_template_id
|
||||
-- FOREIGN KEY (template_id) REFERENCES prompt_template(id) ON DELETE SET NULL;
|
||||
|
||||
-- 5. 创建一些示例数据(可选)
|
||||
-- INSERT INTO user_statistics (user_id, total_generations, favorite_count, avg_rating)
|
||||
-- VALUES (1, 0, 0, 0.00);
|
||||
|
||||
-- 6. 创建视图(可选,用于统计查询)
|
||||
CREATE OR REPLACE VIEW history_statistics AS
|
||||
SELECT
|
||||
h.user_id,
|
||||
COUNT(*) as total_count,
|
||||
COUNT(CASE WHEN h.is_favorite = TRUE THEN 1 END) as favorite_count,
|
||||
AVG(h.satisfaction_rating) as avg_rating,
|
||||
MAX(h.created_at) as last_generation_at,
|
||||
COUNT(CASE WHEN h.created_at >= DATE_SUB(NOW(), INTERVAL 7 DAY) THEN 1 END) as week_count,
|
||||
COUNT(CASE WHEN h.created_at >= DATE_SUB(NOW(), INTERVAL 30 DAY) THEN 1 END) as month_count
|
||||
FROM prompt_history h
|
||||
GROUP BY h.user_id;
|
||||
|
||||
-- 7. 创建存储过程(可选,用于清理旧数据)
|
||||
DELIMITER //
|
||||
CREATE PROCEDURE CleanOldHistory(IN days_to_keep INT)
|
||||
BEGIN
|
||||
DECLARE EXIT HANDLER FOR SQLEXCEPTION
|
||||
BEGIN
|
||||
ROLLBACK;
|
||||
RESIGNAL;
|
||||
END;
|
||||
|
||||
START TRANSACTION;
|
||||
|
||||
-- 删除指定天数前的历史记录
|
||||
DELETE FROM prompt_history
|
||||
WHERE created_at < DATE_SUB(NOW(), INTERVAL days_to_keep DAY);
|
||||
|
||||
-- 更新用户统计
|
||||
UPDATE user_statistics us
|
||||
SET
|
||||
total_generations = (
|
||||
SELECT COUNT(*) FROM prompt_history h
|
||||
WHERE h.user_id = us.user_id
|
||||
),
|
||||
favorite_count = (
|
||||
SELECT COUNT(*) FROM prompt_history h
|
||||
WHERE h.user_id = us.user_id AND h.is_favorite = TRUE
|
||||
),
|
||||
avg_rating = (
|
||||
SELECT AVG(h.satisfaction_rating) FROM prompt_history h
|
||||
WHERE h.user_id = us.user_id AND h.satisfaction_rating IS NOT NULL
|
||||
),
|
||||
last_generation_at = (
|
||||
SELECT MAX(h.created_at) FROM prompt_history h
|
||||
WHERE h.user_id = us.user_id
|
||||
),
|
||||
updated_at = NOW()
|
||||
WHERE us.user_id IN (
|
||||
SELECT DISTINCT user_id FROM prompt_history
|
||||
);
|
||||
|
||||
COMMIT;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- 8. 创建触发器(可选,用于自动更新统计)
|
||||
DELIMITER //
|
||||
CREATE TRIGGER update_user_stats_after_insert
|
||||
AFTER INSERT ON prompt_history
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO user_statistics (user_id, total_generations, favorite_count, avg_rating, last_generation_at)
|
||||
VALUES (NEW.user_id, 1, IF(NEW.is_favorite, 1, 0), NEW.satisfaction_rating, NEW.created_at)
|
||||
ON DUPLICATE KEY UPDATE
|
||||
total_generations = total_generations + 1,
|
||||
favorite_count = favorite_count + IF(NEW.is_favorite, 1, 0),
|
||||
avg_rating = (
|
||||
SELECT AVG(satisfaction_rating)
|
||||
FROM prompt_history
|
||||
WHERE user_id = NEW.user_id AND satisfaction_rating IS NOT NULL
|
||||
),
|
||||
last_generation_at = NEW.created_at,
|
||||
updated_at = NOW();
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER update_user_stats_after_update
|
||||
AFTER UPDATE ON prompt_history
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE user_statistics
|
||||
SET
|
||||
total_generations = (
|
||||
SELECT COUNT(*) FROM prompt_history WHERE user_id = NEW.user_id
|
||||
),
|
||||
favorite_count = (
|
||||
SELECT COUNT(*) FROM prompt_history
|
||||
WHERE user_id = NEW.user_id AND is_favorite = TRUE
|
||||
),
|
||||
avg_rating = (
|
||||
SELECT AVG(satisfaction_rating) FROM prompt_history
|
||||
WHERE user_id = NEW.user_id AND satisfaction_rating IS NOT NULL
|
||||
),
|
||||
updated_at = NOW()
|
||||
WHERE user_id = NEW.user_id;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
DELIMITER //
|
||||
CREATE TRIGGER update_user_stats_after_delete
|
||||
AFTER DELETE ON prompt_history
|
||||
FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE user_statistics
|
||||
SET
|
||||
total_generations = (
|
||||
SELECT COUNT(*) FROM prompt_history WHERE user_id = OLD.user_id
|
||||
),
|
||||
favorite_count = (
|
||||
SELECT COUNT(*) FROM prompt_history
|
||||
WHERE user_id = OLD.user_id AND is_favorite = TRUE
|
||||
),
|
||||
avg_rating = (
|
||||
SELECT AVG(satisfaction_rating) FROM prompt_history
|
||||
WHERE user_id = OLD.user_id AND satisfaction_rating IS NOT NULL
|
||||
),
|
||||
updated_at = NOW()
|
||||
WHERE user_id = OLD.user_id;
|
||||
END //
|
||||
DELIMITER ;
|
||||
|
||||
-- 执行完成提示
|
||||
SELECT '历史记录表创建完成!' as message;
|
||||
Reference in New Issue
Block a user