Files
schoolNews/schoolNewsServ/.bin/mysql/sql/createTableMessage.sql
2025-11-13 19:00:27 +08:00

146 lines
6.9 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.

-- =====================================================
-- 消息通知模块 - 数据库表结构
-- 包含3张表消息主体表、消息接收对象表、用户消息表
-- =====================================================
-- 1. 消息主体表
DROP TABLE IF EXISTS tb_sys_message;
CREATE TABLE tb_sys_message (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL UNIQUE COMMENT '消息唯一标识',
-- 消息内容
title VARCHAR(200) NOT NULL COMMENT '消息标题',
content TEXT NOT NULL COMMENT '消息内容',
message_type VARCHAR(20) NOT NULL DEFAULT 'notification' COMMENT '消息类型notification-通知/announcement-公告/warning-预警',
priority VARCHAR(20) NOT NULL DEFAULT 'normal' COMMENT '优先级normal-普通/important-重要/urgent-紧急',
-- 发送人信息
sender_id VARCHAR(50) NOT NULL COMMENT '发送人用户ID',
sender_name VARCHAR(100) COMMENT '发送人姓名(冗余字段)',
sender_dept_id VARCHAR(50) NOT NULL COMMENT '发送人部门ID',
sender_dept_name VARCHAR(100) COMMENT '发送人部门名称(冗余字段)',
-- 发送时间控制(定时发送功能)
send_mode VARCHAR(20) NOT NULL DEFAULT 'immediate' COMMENT '发送模式immediate-立即发送/scheduled-定时发送',
scheduled_time DATETIME COMMENT '计划发送时间sendMode=scheduled时必填',
actual_send_time DATETIME COMMENT '实际发送时间',
-- 状态管理
status VARCHAR(20) NOT NULL DEFAULT 'draft' COMMENT '状态draft-草稿/pending-待发送/sending-发送中/sent-已发送/failed-失败/cancelled-已取消',
-- 统计信息
target_user_count INT DEFAULT 0 COMMENT '目标用户总数',
sent_count INT DEFAULT 0 COMMENT '已发送数量',
success_count INT DEFAULT 0 COMMENT '发送成功数量',
failed_count INT DEFAULT 0 COMMENT '发送失败数量',
read_count INT DEFAULT 0 COMMENT '已读数量',
-- 失败处理和重试机制
retry_count INT DEFAULT 0 COMMENT '当前重试次数',
max_retry_count INT DEFAULT 3 COMMENT '最大重试次数',
last_error TEXT COMMENT '最后错误信息',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted BIT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_message_id (message_id),
INDEX idx_sender_id (sender_id),
INDEX idx_sender_dept_id (sender_dept_id),
INDEX idx_status (status),
INDEX idx_send_mode (send_mode),
INDEX idx_scheduled_time (scheduled_time),
INDEX idx_create_time (create_time),
INDEX idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息主体表';
-- 2. 消息发送方式接收对象表
DROP TABLE IF EXISTS tb_sys_message_target;
CREATE TABLE tb_sys_message_target (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL COMMENT '消息ID关联tb_sys_message.message_id',
-- 发送方式
send_method VARCHAR(100) NOT NULL COMMENT '发送方式system-系统消息/email-邮件/sms-短信多选时逗号分隔system,email',
-- 接收对象
target_type VARCHAR(20) NOT NULL COMMENT '接收对象类型dept-部门/role-角色/user-人员',
target_id VARCHAR(50) NOT NULL COMMENT '接收对象ID部门ID/角色ID/用户ID',
target_name VARCHAR(100) COMMENT '接收对象名称(冗余字段,便于展示)',
-- 作用域部门(关键字段:限制角色的部门范围)
scope_dept_id VARCHAR(50) NOT NULL COMMENT '作用域部门IDdept时与target_id相同role时表示该角色限定在哪个部门及其子部门范围内user时为用户所属部门ID',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_messageID (message_id),
INDEX idx_target_type (target_type),
INDEX idx_scope_dept_id (scope_dept_id),
INDEX idx_delete_time (delete_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='消息发送方式接收对象表';
-- 3. 用户接收消息表
DROP TABLE IF EXISTS tb_sys_message_user;
CREATE TABLE tb_sys_message_user (
-- 基础标识
id VARCHAR(50) PRIMARY KEY COMMENT '主键ID',
message_id VARCHAR(50) NOT NULL COMMENT '消息ID关联tb_sys_message.message_id',
user_id VARCHAR(50) NOT NULL COMMENT '接收用户ID',
-- 发送方式
send_method VARCHAR(20) NOT NULL COMMENT '实际发送方式system-系统消息/email-邮件/sms-短信',
-- 阅读状态
is_read tinyint(1) NOT NULL DEFAULT 0 COMMENT '是否已读0-未读1-已读',
read_time DATETIME COMMENT '阅读时间',
-- 发送状态
send_status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '发送状态pending-待发送/success-发送成功/failed-发送失败',
fail_reason TEXT COMMENT '失败原因',
-- 基础字段
creator VARCHAR(50) COMMENT '创建人ID',
updater VARCHAR(50) COMMENT '更新人ID',
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
delete_time DATETIME COMMENT '删除时间',
deleted tinyint(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除0-未删除1-已删除',
-- 索引
INDEX idx_message_id (message_id),
INDEX idx_user_id (user_id),
INDEX idx_is_read (is_read),
INDEX idx_send_status (send_status),
INDEX idx_deleted (deleted),
INDEX idx_user_read (user_id, is_read, deleted) COMMENT '用户未读消息查询索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='用户接收消息表';
-- =====================================================
-- 初始化说明
-- =====================================================
-- 1. 执行本SQL脚本创建3张表
-- 2. 执行message_menu.sql插入菜单权限数据
-- 3. 表结构说明:
-- - tb_sys_message存储消息主体信息支持定时发送
-- - tb_sys_message_target存储接收对象配置scopeDeptID限制权限范围
-- - tb_sys_message_user存储每个用户的消息记录支持已读/未读状态
-- =====================================================