195 lines
8.6 KiB
MySQL
195 lines
8.6 KiB
MySQL
|
|
-- =====================================================
|
|||
|
|
-- Timeline 数据库迁移脚本
|
|||
|
|
-- 版本: V1.1.0
|
|||
|
|
-- 日期: 2024
|
|||
|
|
-- 描述: 第一阶段核心功能优化 - 数据库结构变更
|
|||
|
|
-- =====================================================
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 1. 时间线节点排序字段
|
|||
|
|
-- 功能: 支持拖拽排序功能
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 为 story_item 表添加排序字段
|
|||
|
|
ALTER TABLE story_item
|
|||
|
|
ADD COLUMN sort_order INT DEFAULT 0 COMMENT '排序值,数值越小越靠前,用于拖拽排序';
|
|||
|
|
|
|||
|
|
-- 为排序字段添加索引,优化查询性能
|
|||
|
|
CREATE INDEX idx_story_item_sort_order
|
|||
|
|
ON story_item(story_instance_id, sort_order, story_item_time DESC);
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 2. 标签系统表结构
|
|||
|
|
-- 功能: 支持为时间线节点添加标签
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 标签表
|
|||
|
|
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='时间线节点标签关联表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 3. 评论系统表结构
|
|||
|
|
-- 功能: 支持对时间线节点进行评论
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 评论表
|
|||
|
|
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='评论表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 4. 点赞系统表结构
|
|||
|
|
-- 功能: 支持对时间线节点进行点赞
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 点赞表
|
|||
|
|
CREATE TABLE IF NOT EXISTS story_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='点赞表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 5. 收藏系统表结构
|
|||
|
|
-- 功能: 支持收藏时间线节点
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 收藏表
|
|||
|
|
CREATE TABLE IF NOT EXISTS story_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='收藏表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 6. 消息通知表结构
|
|||
|
|
-- 功能: 支持系统消息推送
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 消息通知表
|
|||
|
|
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 '关联类型',
|
|||
|
|
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='消息通知表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 7. 操作历史记录表
|
|||
|
|
-- 功能: 支持撤销/重做功能
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 操作历史表
|
|||
|
|
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='操作历史记录表';
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 8. 优化现有表索引
|
|||
|
|
-- 功能: 提升查询性能
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 为 story_item 表添加复合索引,优化时间线查询
|
|||
|
|
CREATE INDEX idx_story_item_time_query
|
|||
|
|
ON story_item(story_instance_id, is_delete, story_item_time DESC);
|
|||
|
|
|
|||
|
|
-- 为 story_permission 表添加索引
|
|||
|
|
CREATE INDEX idx_story_permission_user
|
|||
|
|
ON story_permission(user_id, permission_type);
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 数据迁移说明
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
-- 1. sort_order 字段默认值为 0,现有数据无需迁移
|
|||
|
|
-- 2. 新表均为空表,无需数据迁移
|
|||
|
|
-- 3. 建议在低峰期执行此脚本
|
|||
|
|
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
-- 回滚脚本 (如需回滚,请执行以下语句)
|
|||
|
|
-- -----------------------------------------------------
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
-- 删除新增字段
|
|||
|
|
ALTER TABLE story_item DROP COLUMN sort_order;
|
|||
|
|
|
|||
|
|
-- 删除新增索引
|
|||
|
|
DROP INDEX idx_story_item_sort_order ON story_item;
|
|||
|
|
DROP INDEX idx_story_item_time_query ON story_item;
|
|||
|
|
DROP INDEX idx_story_permission_user ON story_permission;
|
|||
|
|
|
|||
|
|
-- 删除新增表
|
|||
|
|
DROP TABLE IF EXISTS operation_history;
|
|||
|
|
DROP TABLE IF EXISTS notification;
|
|||
|
|
DROP TABLE IF EXISTS story_favorite;
|
|||
|
|
DROP TABLE IF EXISTS story_like;
|
|||
|
|
DROP TABLE IF EXISTS story_comment;
|
|||
|
|
DROP TABLE IF EXISTS story_item_tag;
|
|||
|
|
DROP TABLE IF EXISTS tag;
|
|||
|
|
*/
|