Files
schoolNews/schoolNewsServ/.bin/mysql/sql/createTableMessage.sql

146 lines
6.9 KiB
MySQL
Raw Permalink Normal View History

2025-11-13 19:00:27 +08:00
-- =====================================================
-- 消息通知模块 - 数据库表结构
-- 包含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存储每个用户的消息记录支持已读/未读状态
-- =====================================================