03_自考互助社区门户网站详细设计说明书

99 阅读16分钟

自考互助社区门户网站详细设计说明书(单体架构版)

1. 系统架构设计

1.1 整体架构图

整体架构图.png

1.2 技术栈说明

层级技术选型版本用途
前端Vue3 + Element Plus3.xPC/移动端界面
后端Spring Boot2.7.x业务逻辑处理
安全Spring Security5.7.x认证授权
数据MySQL8.0主数据库
缓存Redis6.x会话/热点数据
搜索Elasticsearch7.x公告/政策检索

2. 数据库设计

2.1 表设计原则

  • 表名前缀规范

    • 表名使用se_前缀(se_announcement),体现业务领域(Self-education Exam)
    • 前缀长度控制在 2-3 字符,避免影响可读性
  • 字段名无前缀

    • 字段名采用语义化命名(如publish_date而非pub_date
    • 遵循驼峰命名法(如examType)或下划线命名法(如exam_type),本设计采用下划线提升兼容性
  • UUID 主键设计

    • id字段使用varchar(36)存储 UUID,支持分布式系统
    • UUID 生成方式(Java):UUID.randomUUID().toString()

自考资讯公告表(sys_notice)

CREATE TABLE `sys_notice` (
  `anno_id` varchar(50) NOT NULL COMMENT '公告ID(UUID)',
  `title` varchar(255) NOT NULL COMMENT '公告标题',
  `content` longtext COMMENT '公告内容',
  `province` varchar(50) DEFAULT NULL COMMENT '发布地区',
  `exam_type` tinyint(1) DEFAULT NULL COMMENT '考试类型(1=专科,2=本科)',
  `publish_date` datetime DEFAULT NULL COMMENT '发布日期',
  `is_new` tinyint(1) DEFAULT '0' COMMENT '是否最新(1=是,0=否)',
  `is_hot` tinyint(1) DEFAULT '0' COMMENT '是否热门(1=是,0=否)',
  `source_type` tinyint(1) NOT NULL COMMENT '数据来源类型(1=系统内置,2=爬取数据)',
  `source_url` varchar(512) DEFAULT NULL COMMENT '爬取数据来源URL',
  `crawl_time` datetime DEFAULT NULL COMMENT '爬取时间',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `idx_source_type` (`source_type`),
  KEY `idx_province` (`province`),
  KEY `idx_exam_type` (`exam_type`),
  KEY `idx_publish_date` (`publish_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考公告表';
字段名数据类型允许空默认值说明
idvarchar(50)公告 ID,使用 UUID 字符串(如1a2b3c4d-5e6f-7g8h-9i0j-1k2l3m4n5o6p
titlevarchar(255)公告标题,用于页面展示和搜索
contentlongtext公告具体内容,支持 HTML 或纯文本存储
summaryvarchar(500)公告内容摘要,支持 HTML 或纯文本存储
provincevarchar(50)发布地区,对应页面筛选条件
publish_datedatetime公告发布日期,用于排序和筛选
is_newtinyint(1)0是否标记为最新,对应页面 "最新" 标签
is_hottinyint(1)0是否标记为热门,对应页面 "热门" 标签
view_countint(11)0公告浏览数量
source_typetinyint(1)数据来源类型 (1 = 系统内置,2 = 爬取数据),核心区分字段
source_urlvarchar(512)爬取数据的原始 URL,用于溯源和更新
crawl_timedatetime爬取数据的时间,用于数据更新和时效性判断
update_timedatetimeCURRENT_TIMESTAMP数据最后更新时间,自动维护
create_timedatetimeCURRENT_TIMESTAMP数据创建时间,自动维护

自考考试时间表(sys_exam_schedule)

CREATE TABLE `sys_exam_schedule` (
  `exam_schedule_id` bigint NOT NULL AUTO_INCREMENT,
  `exam_year` smallint NOT NULL COMMENT '考试年份',
  `exam_term` smallint NOT NULL COMMENT '考试学期(4月/7月/10月等)',
  `start_date` date NOT NULL COMMENT '考试开始日期',
  `end_date` date NOT NULL COMMENT '考试结束日期',
  `registration_start` date COMMENT '报名开始日期',
  `registration_end` date COMMENT '报名结束日期',
  `score_release_date` date COMMENT '成绩公布日期',
  `status` tinyint DEFAULT '0' COMMENT '状态(0未开始/1进行中/2已结束)',
  PRIMARY KEY (`exam_schedule_id`),
  UNIQUE KEY `idx_year_term` (`exam_year`, `exam_term`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考考试时间表';
字段名数据类型说明约束
exam_schedule_idBIGINT主键IDPRIMARY KEY, AUTO_INCREMENT
exam_yearSMALLINT考试年份NOT NULL
exam_termSMALLINT考试学期(4月/7月/10月等)NOT NULL
start_dateDATE考试开始日期NOT NULL
end_dateDATE考试结束日期NOT NULL
registration_startDATE报名开始日期
registration_endDATE报名结束日期
score_release_dateDATE成绩公布日期
statusTINYINT状态(0未开始/1进行中/2已结束)DEFAULT 0

自考学科门类表(sys_subject_category)

CREATE TABLE `sys_subject_category` (
  `subject_category_id` varchar(50) NOT NULL COMMENT '门类ID',
  `subject_code` varchar(10) NOT NULL COMMENT '门类代码(如:02)',
  `subject_name` varchar(50) NOT NULL COMMENT '门类名称(如:经济学)',
  `sort` int DEFAULT '0' COMMENT '排序字段',
  `status` tinyint DEFAULT '1' COMMENT '状态(0禁用 1启用)',
  PRIMARY KEY (`subject_category_id`),
  UNIQUE KEY `idx_code` (`subject_code`)
) ENGINE=InnoDB COMMENT='学科门类表(一级分类)';
字段名类型描述是否主键备注
subject_category_idVARCHAR(50)门类ID
subject_codeVARCHAR(20)门类代码如:02(经济学)
subject_nameVARCHAR(50)门类名称如:经济学
sortINT排序权重默认0
statusTINYINT状态0禁用 1启用

自考专业类别表(sys_major_category)

CREATE TABLE `sys_major_category` (
  `major_category_id` varchar(50) NOT NULL COMMENT '类别ID',
  `subject_category_id` varchar(50) NOT NULL COMMENT '所属学科门类ID',
  `category_code` varchar(50) NOT NULL COMMENT '类别代码(如:0201)',
  `category_name` varchar(50) NOT NULL COMMENT '类别名称(如:经济学类)',
  PRIMARY KEY (`major_category_id`)
) ENGINE=InnoDB COMMENT='专业类别表(二级分类)';
字段名类型描述是否主键备注
major_category_idVARCHAR(50)类别ID自增主键
subject_category_idVARCHAR(50)所属门类ID外键→subject_category
category_codeVARCHAR(50)类别代码如:0201(经济学类)
category_nameVARCHAR(50)类别名称如:经济学类

自考专业表(sys_major)

字段名类型描述是否主键备注
major_idVARCHAR(20)专业 IDUUID
major_codeVARCHAR(20)专业代码例如:C050201
major_nameVARCHAR(50)专业名称例如:英语 (本科)
degreeVARCHAR(20)学历层次如:专科、本科
departmentVARCHAR(50)主考院校例如:北京大学
credit_requireINT毕业学分要求例如:68 学分
create_timeDATETIME创建时间自动记录创建时间
update_timeDATETIME更新时间自动记录更新时间
-- 创建自考专业表
CREATE TABLE IF NOT EXISTS `sys_major` (
  `major_id` VARCHAR(20) PRIMARY KEY,
  `major_code` VARCHAR(20) NOT NULL COMMENT '专业代码',
  `major_name` VARCHAR(50) NOT NULL COMMENT '专业名称',
  `degree` VARCHAR(20) NOT NULL COMMENT '学历层次',
  `department` VARCHAR(50) NOT NULL COMMENT '主考院校',
  `credit_require` INT NOT NULL COMMENT '毕业学分要求',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  UNIQUE KEY `idx_major_code` (`major_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考专业表';

自考课程表(sys_course)

字段名类型描述是否主键备注
course_idINT课程 ID自增主键
course_codeVARCHAR(20)课程代码例如:00001
course_nameVARCHAR(50)课程名称例如:马克思基本原理概论
creditINT学分例如:4 学分
course_typeVARCHAR(20)课程类型如:公共课、专业课
exam_typeVARCHAR(20)考试类型如:笔试、实践考核
major_idINT所属专业 ID外键关联 major 表
is_requiredTINYINT是否必修课1 = 必修,0 = 选修
create_timeDATETIME创建时间自动记录创建时间
update_timeDATETIME更新时间自动记录更新时间
-- 创建自考课程表
CREATE TABLE IF NOT EXISTS `sys_course` (
  `course_id` VARCHAR(20) PRIMARY KEY,
  `course_code` VARCHAR(20) NOT NULL COMMENT '课程代码',
  `course_name` VARCHAR(50) NOT NULL COMMENT '课程名称',
  `credit` INT NOT NULL COMMENT '学分',
  `course_type` VARCHAR(20) NOT NULL COMMENT '课程类型',
  `exam_type` VARCHAR(20) NOT NULL COMMENT '考试类型',
  `major_id` VARCHAR(20) NOT NULL COMMENT '所属专业ID',
  `is_required` TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否必修课',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  UNIQUE KEY `idx_course_code` (`course_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考课程表';

课程建议表(sys_course_suggestion)

字段名类型描述是否主键备注
idbigint主键ID自增长
course_idbigint关联课程ID外键,关联课程表(course)
user_idbigint提交用户ID外键,关联用户表(user)
contenttext建议内容支持长文本输入
upvotesint点赞数默认值0,表示未获赞
anonymoustinyint(1)是否匿名0-不匿名(默认),1-匿名
statustinyint状态1-正常显示(默认),0-隐藏
create_timedatetime创建时间自动记录首次提交时间
update_timedatetime更新时间自动更新最后修改时间
CREATE TABLE `sys_course_suggestion` (
  `course_suggestion_id` varchar(50) NOT NULL,
  `course_id`  varchar(50) NOT NULL COMMENT '课程ID',
  `user_id`  varchar(50) NOT NULL COMMENT '用户ID',
  `content` text NOT NULL COMMENT '建议内容',
  `upvotes` int DEFAULT '0' COMMENT '点赞数',
  `anonymous` tinyint(1) DEFAULT '0' COMMENT '是否匿名',
  `status` tinyint DEFAULT '1' COMMENT '状态(1-正常,0-隐藏)',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`course_suggestion_id`),
  KEY `idx_course` (`course_suggestion_id`),
  KEY `idx_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课程建议表';

自考院校表(sys_school)

字段名类型描述是否主键备注
school_idVARCHAR(20)院校 ID自增主键
school_codeVARCHAR(20)院校代码教育部院校代码
school_nameVARCHAR(100)院校名称全称
school_levelINT院校层次如:985、211、双非
provinceVARCHAR(20)所在省份
cityVARCHAR(20)所在城市
addressVARCHAR(200)详细地址
websiteVARCHAR(100)官方网站
contact_phoneVARCHAR(20)联系电话自考办联系电话
contact_emailVARCHAR(50)联系邮箱
established_atDATE建校时间
school_introTEXT院校简介
create_timeDATETIME创建时间自动记录
update_timeDATETIME更新时间自动记录
-- 创建主考院校表
CREATE TABLE IF NOT EXISTS `sys_school` (
  `school_id` VARCHAR(20) PRIMARY KEY,
  `school_code` VARCHAR(20) NOT NULL COMMENT '院校代码',
  `school_name` VARCHAR(100) NOT NULL COMMENT '院校名称',
  `school_level` VARCHAR(20) NOT NULL COMMENT '院校层次',
  `area_id` VARCHAR(20) NOT NULL COMMENT '所在省份',
  `city` VARCHAR(20) NOT NULL COMMENT '所在城市',
  `address` VARCHAR(200) DEFAULT NULL COMMENT '详细地址',
  `website` VARCHAR(100) DEFAULT NULL COMMENT '官方网站',
  `contact_phone` VARCHAR(20) DEFAULT NULL COMMENT '联系电话',
  `contact_email` VARCHAR(50) DEFAULT NULL COMMENT '联系邮箱',
  `established_at` DATE DEFAULT NULL COMMENT '建校时间',
  `school_intro` TEXT COMMENT '院校简介',
  `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  UNIQUE KEY `idx_school_code` (`school_code`),
  KEY `idx_school_name` (`school_name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考主考院校表';

自考题目表(sys_exam_question)

字段名类型描述是否主键备注
question_idvarchar(50)题目 ID
typetinyint题型1 单选 / 2 多选 / 3 判断 / 4 填空 / 5 简答 / 6 案例
course_idvarchar(50)课程 ID
difficultytinyint难度1-5,默认 3
contenttext题目内容
optionsjson选项JSON 数组
answertext正确答案
analysistext题目解析
statustinyint状态0 待审核 / 1 已发布 / 2 已下线
create_byvarchar(50)创建人 ID
create_timedatetime创建时间默认 CURRENT_TIMESTAMP
update_timedatetime更新时间默认 CURRENT_TIMESTAMP,更新时自动刷新
CREATE TABLE `sys_exam_question`
(
    `question_id` varchar(50) NOT NULL,
    `type`        tinyint     NOT NULL COMMENT '题型(1单选/2多选/3判断/4填空/5简答/6案例)',
    `course_id`   varchar(50) NOT NULL COMMENT '课程ID',
    `difficulty`  tinyint              DEFAULT '3' COMMENT '难度(1-5)',
    `content`     text        NOT NULL COMMENT '题目内容',
    `options`     json                 DEFAULT NULL COMMENT '选项(JSON数组)',
    `answer`      text        NOT NULL COMMENT '正确答案',
    `analysis`    text COMMENT '题目解析',
    `status`      tinyint     NOT NULL DEFAULT '0' COMMENT '状态(0待审核/1已发布/2已下线)',
    create_by varchar(50)     NOT NULL COMMENT '创建人ID',
    `create_time` datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_time` datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='自考题目表';

自考试卷表(sys_exam_paper)

字段名类型描述是否主键备注
paper_idvarchar(50)试卷 ID
titlevarchar(100)试卷名称
course_idvarchar(50)课程 ID
typetinyint类型1 真题 / 2 模拟 / 3 练习
paper_strategy_idvarchar(50)试卷策略 ID
create_byvarchar(50)创建人 ID可空
create_timedatetime创建时间默认 CURRENT_TIMESTAMP
update_timedatetime更新时间默认 CURRENT_TIMESTAMP,更新时自动刷新
CREATE TABLE `sys_exam_paper`
(
    `paper_id`          varchar(50)  NOT NULL,
    `title`             varchar(100) NOT NULL COMMENT '试卷名称',
    `course_id`         varchar(50)  NOT NULL COMMENT '课程ID',
    `type`              tinyint      NOT NULL COMMENT '类型(1真题/2模拟/3练习)',
    `paper_strategy_id` varchar(50)  NOT NULL COMMENT '试卷策略ID',
    `create_by`         varchar(50)                DEFAULT NULL COMMENT '创建人ID',
    `create_time`       datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_time`       datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`paper_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷表';

自考试卷策略表(sys_exam_paper_strategy)

字段名类型描述是否主键备注
paper_strategy_idvarchar(50)策略 ID
namevarchar(100)策略名称
strategy_typevarchar(20)策略类型random/fixed/manual
course_idvarchar(50)课程 ID
total_scoreint试卷总分
time_limitint考试时长分钟,可空
create_byvarchar(50)创建人
create_timedatetime创建时间默认 CURRENT_TIMESTAMP
CREATE TABLE `sys_exam_paper_strategy`
(
    `paper_strategy_id` varchar(50)  NOT NULL,
    `name`              varchar(100) NOT NULL COMMENT '策略名称',
    `strategy_type`     varchar(20)  NOT NULL COMMENT 'random/fixed/manual',
    `course_id`         varchar(50)  NOT NULL COMMENT '课程ID',
    `total_score`       int          NOT NULL COMMENT '试卷总分',
    `time_limit`        int                   DEFAULT NULL COMMENT '考试时长(分钟)',
    `create_by`        varchar(50)     NOT NULL COMMENT '创建人',
    `create_time`       datetime     NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`paper_strategy_id`)
) ENGINE=InnoDB COMMENT='试卷生成策略表';

自考试卷策略明细表(sys_exam_strategy_rule)

字段名类型描述是否主键备注
strategy_rule_idvarchar(50)策略规则 ID
paper_strategy_idbigint策略 ID外键关联 sys_exam_paper_strategy 表
question_typetinyint题型
difficultytinyint难度1-3,可空
question_countint题目数量
each_scoredecimal(5,2)每题分值
sortint排序默认 0
CREATE TABLE `sys_exam_strategy_rule`
(
    `strategy_rule_id` varchar(50)   NOT NULL,
    `paper_strategy_id`      bigint        NOT NULL COMMENT '策略ID',
    `question_type`    tinyint       NOT NULL COMMENT '题型',
    `difficulty`       tinyint DEFAULT NULL COMMENT '难度(1-3)',
    `question_count`   int           NOT NULL COMMENT '题目数量',
    `each_score`       decimal(5, 2) NOT NULL COMMENT '每题分值',
    `sort`             int     DEFAULT '0' COMMENT '排序',
    PRIMARY KEY (`strategy_rule_id`),
    KEY                `idx_strategy` (`paper_strategy_id`)
) ENGINE=InnoDB COMMENT='组卷策略明细表';

试卷题目关联表(sys_exam_paper_question)

字段名类型描述是否主键备注
paper_question_idvarchar(50)关联 ID
paper_idvarchar(50)试卷 ID外键关联 sys_exam_paper 表
question_idvarchar(50)题目 ID外键关联 sys_exam_question 表
scoreint题目分值
sortint题目排序默认 0
create_timedatetime创建时间默认 CURRENT_TIMESTAMP
CREATE TABLE `sys_exam_paper_question`
(
    `paper_question_id` varchar(50) NOT NULL,
    `paper_id`          varchar(50) NOT NULL COMMENT '试卷ID',
    `question_id`       varchar(50) NOT NULL COMMENT '题目ID',
    `score`             int         NOT NULL COMMENT '题目分值',
    `sort`              int                  DEFAULT '0' COMMENT '题目排序',
    `create_time`       datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`paper_question_id`),
    UNIQUE KEY `uk_paper_question` (`paper_id`,`question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='试卷题目关联表';

用户答题记录表(sys_exam_user_answer)

字段名类型描述是否主键备注
user_answer_idvarchar(50)答题记录 ID
user_idvarchar(50)用户 ID
question_idvarchar(50)题目 ID
paper_idvarchar(50)试卷 ID单独练习时可为空
user_answertext用户答案
is_correcttinyint是否正确可空
spend_timeint答题耗时秒,可空
answer_timedatetime答题时间默认 CURRENT_TIMESTAMP
CREATE TABLE `sys_exam_user_answer`
(
    `user_answer_id` varchar(50) NOT NULL,
    `user_id`        varchar(50) NOT NULL COMMENT '用户ID',
    `question_id`    varchar(50) NOT NULL COMMENT '题目ID',
    `paper_id`       varchar(50)          DEFAULT NULL COMMENT '试卷ID(如为单独练习则为空)',
    `user_answer`    text COMMENT '用户答案',
    `is_correct`     tinyint              DEFAULT NULL COMMENT '是否正确',
    `spend_time`     int                  DEFAULT NULL COMMENT '答题耗时(秒)',
    `answer_time`    datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`user_answer_id`),
    KEY              `idx_user_question` (`user_id`,`question_id`),
    KEY              `idx_user_paper` (`user_id`,`paper_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户答题记录表';

用户错题本表(sys_exam_user_wrong_question)

字段名类型描述是否主键备注
user_wrong_question_idvarchar(50)错题记录 ID
user_idvarchar(50)用户 ID
question_idvarchar(50)题目 ID
wrong_countint错误次数默认 0
last_wrong_timedatetime最后错误时间默认 CURRENT_TIMESTAMP
create_timedatetime创建时间默认 CURRENT_TIMESTAMP
update_timedatetime更新时间默认 CURRENT_TIMESTAMP,更新时自动刷新
CREATE TABLE `sys_exam_user_wrong_question`
(
    `user_wrong_question_id` varchar(50) NOT NULL,
    `user_id`                varchar(50) NOT NULL COMMENT '用户ID',
    `question_id`            varchar(50)      NOT NULL COMMENT '题目ID',
    `wrong_count`            int         NOT NULL DEFAULT 0 COMMENT '错误次数',
    `last_wrong_time`        datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `create_time`            datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP,
    `update_time`            datetime    NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (`user_wrong_question_id`),
    UNIQUE KEY `uk_user_wrong_question` (`user_id`,`question_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户错题本表';

消息模板表(sys_message_template)

CREATE TABLE  IF NOT EXISTS `message_template` (
  `msg_template_id` varchar(50) NOT NULL COMMENT '主键ID',
  `template_code` varchar(64) NOT NULL COMMENT '模板编码',
  `template_name` varchar(128) NOT NULL COMMENT '模板名称',
  `template_type` tinyint(4) NOT NULL COMMENT '模板类型(1:短信 2:邮件 3:站内信 4:APP推送)',
  `title` varchar(255) DEFAULT NULL COMMENT '消息标题(邮件/站内信需要)',
  `content` text NOT NULL COMMENT '消息内容',
  `variables` varchar(512) DEFAULT NULL COMMENT '模板变量(JSON格式)',
  `status` tinyint(4) NOT NULL DEFAULT '1' COMMENT '状态(0:禁用 1:启用)',
  `remark` varchar(255) DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`msg_template_id`),
  UNIQUE KEY `uk_template_code` (`template_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='消息模板表';

-- 示例数据
INSERT INTO `message_template` (`msg_template_id`, `template_code`, `template_name`, `template_type`, `title`, `content`, `variables`, `status`, `remark`) 
VALUES 
('1', 'REGISTER_EMAIL', '用户注册邮件', 2, '欢迎注册我们的平台', '尊敬的{username},感谢您注册我们的平台,您的验证码是:{code},有效期10分钟。', '["username","code"]', 1, '用户注册时发送的欢迎邮件'),
('2', 'LOGIN_SMS', '登录验证码短信', 1, NULL, '【XX平台】您的登录验证码是:{code},有效期5分钟。', '["code"]', 1, '用户登录时发送的验证码短信');
字段名类型描述是否主键备注
msg_template_idvarchar(50)主键 ID
template_codevarchar(64)模板编码唯一索引
template_namevarchar(128)模板名称
template_typetinyint(4)模板类型 (1: 短信 2: 邮件 3: 站内信 4:APP 推送)可增加渠道管理(todo)
titlevarchar(255)消息标题 (邮件 / 站内信需要)可为空
contenttext消息内容
variablesvarchar(512)模板变量 (JSON 格式)可为空
statustinyint(4)状态 (0: 禁用 1: 启用)默认值为 1
remarkvarchar(255)备注

3. 接口设计

4. 安全设计

4.1 认证流程

5. 首页功能详细设计

5.1 首页

5.2 关于自考

6. 前端设计

7. 部署方案

7.1 应用打包

7.2 启动脚本

8. 性能优化

8.1 缓存策略

8.2 SQL优化建议

// 使用MyBatis-Plus优化查询
noticeService.lambdaQuery()
    .eq(Notice::getIsTop, 1)
    .orderByDesc(Notice::getCreateTime)
    .page(new Page<>(1, 10));

本设计文档针对单体架构特点进行了以下优化:

  1. 简化了服务拆分,所有模块集成在单一应用中
  2. 采用传统分层架构(Controller-Service-DAO)
  3. 数据库设计更强调单库优化
  4. 部署方案更简单直接
  5. 保留了必要的缓存和搜索组件提升性能