Files
timeline-sql/V1.2.0__search_comment_notification.sql
jianghao c0f89a933e feat(数据库): 添加数据库迁移脚本支持时间线功能
添加V1.1.0至V1.3.0版本的数据库迁移脚本,包含核心功能优化、搜索评论通知系统以及智能功能
2026-02-24 10:49:14 +08:00

231 lines
11 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- =====================================================
-- Timeline 数据库迁移脚本
-- 版本: V1.2.0
-- 日期: 2024
-- 描述: 第二阶段功能增强 - 搜索、标签、评论、通知系统
-- =====================================================
-- -----------------------------------------------------
-- 1. 标签系统表结构(如已存在则跳过)
-- -----------------------------------------------------
-- 标签表
CREATE TABLE IF NOT EXISTS tag (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '标签唯一标识',
name VARCHAR(50) NOT NULL COMMENT '标签名称',
color VARCHAR(20) DEFAULT '#1890ff' COMMENT '标签颜色',
owner_id VARCHAR(64) NOT NULL COMMENT '创建者ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是',
INDEX idx_tag_owner (owner_id),
INDEX idx_tag_name (name)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='标签表';
-- 时间线节点与标签关联表
CREATE TABLE IF NOT EXISTS story_item_tag (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID',
tag_id VARCHAR(64) NOT NULL COMMENT '标签ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
create_id VARCHAR(64) COMMENT '创建者ID',
UNIQUE KEY uk_item_tag (story_item_id, tag_id),
INDEX idx_tag_story_item (tag_id, story_item_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='时间线节点标签关联表';
-- -----------------------------------------------------
-- 2. 评论系统表结构
-- -----------------------------------------------------
-- 评论表
CREATE TABLE IF NOT EXISTS story_comment (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '评论唯一标识',
story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID',
user_id VARCHAR(64) NOT NULL COMMENT '评论用户ID',
parent_id VARCHAR(64) DEFAULT NULL COMMENT '父评论ID用于回复功能',
reply_to_user_id VARCHAR(64) DEFAULT NULL COMMENT '回复的用户ID',
content TEXT NOT NULL COMMENT '评论内容',
like_count INT DEFAULT 0 COMMENT '点赞数',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
is_delete TINYINT DEFAULT 0 COMMENT '是否删除 0-否 1-是',
INDEX idx_comment_story_item (story_item_id, create_time DESC),
INDEX idx_comment_user (user_id),
INDEX idx_comment_parent (parent_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论表';
-- -----------------------------------------------------
-- 3. 点赞系统表结构
-- -----------------------------------------------------
-- 点赞表(节点点赞)
CREATE TABLE IF NOT EXISTS story_item_like (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID',
user_id VARCHAR(64) NOT NULL COMMENT '点赞用户ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_item_user (story_item_id, user_id),
INDEX idx_like_user (user_id, create_time DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='节点点赞表';
-- 评论点赞表
CREATE TABLE IF NOT EXISTS comment_like (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
comment_id VARCHAR(64) NOT NULL COMMENT '评论ID',
user_id VARCHAR(64) NOT NULL COMMENT '点赞用户ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_comment_user (comment_id, user_id),
INDEX idx_comment_like_user (user_id, create_time DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='评论点赞表';
-- -----------------------------------------------------
-- 4. 收藏系统表结构
-- -----------------------------------------------------
-- 收藏表
CREATE TABLE IF NOT EXISTS story_item_favorite (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '收藏记录唯一标识',
story_item_id VARCHAR(64) NOT NULL COMMENT '时间线节点ID',
user_id VARCHAR(64) NOT NULL COMMENT '收藏用户ID',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_item_user (story_item_id, user_id),
INDEX idx_favorite_user (user_id, create_time DESC)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='收藏表';
-- -----------------------------------------------------
-- 5. 消息通知系统表结构
-- -----------------------------------------------------
-- 消息通知表
CREATE TABLE IF NOT EXISTS notification (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '消息唯一标识',
user_id VARCHAR(64) NOT NULL COMMENT '接收用户ID',
type VARCHAR(20) NOT NULL COMMENT '消息类型: COMMENT/LIKE/MENTION/INVITE/SYSTEM',
title VARCHAR(200) NOT NULL COMMENT '消息标题',
content TEXT COMMENT '消息内容',
related_id VARCHAR(64) COMMENT '关联ID(评论ID/节点ID等)',
related_type VARCHAR(20) COMMENT '关联类型: STORY_ITEM/COMMENT/STORY',
sender_id VARCHAR(64) COMMENT '发送者ID',
sender_name VARCHAR(100) COMMENT '发送者名称',
sender_avatar VARCHAR(500) COMMENT '发送者头像',
is_read TINYINT DEFAULT 0 COMMENT '是否已读 0-未读 1-已读',
read_time DATETIME COMMENT '阅读时间',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_notification_user (user_id, is_read, create_time DESC),
INDEX idx_notification_type (type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息通知表';
-- -----------------------------------------------------
-- 6. 操作历史记录表(支持撤销/重做)
-- -----------------------------------------------------
-- 操作历史表
CREATE TABLE IF NOT EXISTS operation_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '记录唯一标识',
user_id VARCHAR(64) NOT NULL COMMENT '操作用户ID',
story_id VARCHAR(64) COMMENT '故事ID',
operation_type VARCHAR(20) NOT NULL COMMENT '操作类型: CREATE/UPDATE/DELETE/REORDER',
target_type VARCHAR(20) NOT NULL COMMENT '目标类型: STORY/STORY_ITEM',
target_id VARCHAR(64) NOT NULL COMMENT '目标ID',
before_data JSON COMMENT '操作前数据快照',
after_data JSON COMMENT '操作后数据快照',
description VARCHAR(200) COMMENT '操作描述',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_history_user_story (user_id, story_id, create_time DESC),
INDEX idx_history_target (target_type, target_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='操作历史记录表';
-- -----------------------------------------------------
-- 7. 用户消息设置表
-- -----------------------------------------------------
-- 用户消息设置表
CREATE TABLE IF NOT EXISTS user_notification_setting (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
user_id VARCHAR(64) UNIQUE NOT NULL COMMENT '用户ID',
comment_notify TINYINT DEFAULT 1 COMMENT '评论通知 0-关闭 1-开启',
like_notify TINYINT DEFAULT 1 COMMENT '点赞通知 0-关闭 1-开启',
mention_notify TINYINT DEFAULT 1 COMMENT '@提及通知 0-关闭 1-开启',
invite_notify TINYINT DEFAULT 1 COMMENT '邀请通知 0-关闭 1-开启',
system_notify TINYINT DEFAULT 1 COMMENT '系统通知 0-关闭 1-开启',
email_notify TINYINT DEFAULT 0 COMMENT '邮件通知 0-关闭 1-开启',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户消息设置表';
-- -----------------------------------------------------
-- 8. @提及记录表
-- -----------------------------------------------------
-- @提及表
CREATE TABLE IF NOT EXISTS mention (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
instance_id VARCHAR(64) UNIQUE NOT NULL COMMENT '提及记录唯一标识',
from_user_id VARCHAR(64) NOT NULL COMMENT '提及者ID',
to_user_id VARCHAR(64) NOT NULL COMMENT '被提及者ID',
related_type VARCHAR(20) NOT NULL COMMENT '关联类型: COMMENT/STORY_ITEM',
related_id VARCHAR(64) NOT NULL COMMENT '关联ID',
is_notified TINYINT DEFAULT 0 COMMENT '是否已发送通知 0-否 1-是',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_mention_to (to_user_id, is_notified, create_time DESC),
INDEX idx_mention_related (related_type, related_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='@提及记录表';
-- -----------------------------------------------------
-- 9. 统计字段更新触发器
-- -----------------------------------------------------
-- 为 story_item 表添加统计字段
ALTER TABLE story_item
ADD COLUMN comment_count INT DEFAULT 0 COMMENT '评论数',
ADD COLUMN like_count INT DEFAULT 0 COMMENT '点赞数',
ADD COLUMN favorite_count INT DEFAULT 0 COMMENT '收藏数';
-- -----------------------------------------------------
-- 10. 索引优化
-- -----------------------------------------------------
-- 为 story_item 表添加复合索引
CREATE INDEX IF NOT EXISTS idx_story_item_stats
ON story_item(story_instance_id, is_delete, like_count DESC, create_time DESC);
-- -----------------------------------------------------
-- 数据迁移说明
-- -----------------------------------------------------
-- 1. 新表均为空表,无需数据迁移
-- 2. 统计字段默认值为 0现有数据无需迁移
-- 3. 建议在低峰期执行此脚本
-- 4. Elasticsearch 索引需要单独创建和同步
-- -----------------------------------------------------
-- 回滚脚本 (如需回滚,请执行以下语句)
-- -----------------------------------------------------
/*
-- 删除新增字段
ALTER TABLE story_item DROP COLUMN comment_count;
ALTER TABLE story_item DROP COLUMN like_count;
ALTER TABLE story_item DROP COLUMN favorite_count;
-- 删除新增索引
DROP INDEX IF EXISTS idx_story_item_stats ON story_item;
-- 删除新增表
DROP TABLE IF EXISTS mention;
DROP TABLE IF EXISTS user_notification_setting;
DROP TABLE IF EXISTS operation_history;
DROP TABLE IF EXISTS notification;
DROP TABLE IF EXISTS story_item_favorite;
DROP TABLE IF EXISTS comment_like;
DROP TABLE IF EXISTS story_item_like;
DROP TABLE IF EXISTS story_comment;
DROP TABLE IF EXISTS story_item_tag;
DROP TABLE IF EXISTS tag;
*/