103
社区成员
发帖
与我相关
我的任务
分享| 这个作业属于哪个课程 | 2501_CS_SE_FZU |
|---|---|
| 这个作业要求在哪里 | 团队作业——概要设计和数据库设计 |
| 团队名称 | CRL Team |
| 这个作业的目标 | 系统设计、数据库设计、安全和权限设计 |
| 其他参考文献 | 《数据库完整性的应用探索》 |
技术框架层次结构
层次结构上,项目分为前端展示层、后端业务逻辑层与数据存储层。前端通过 API 接口与
后端通信,后端 Controller 层接收请求并分发,Service 层处理复杂业务逻辑(如调用智能
错题分析的 Agent 智能体流程),DAO 层负责与 MySQL 等数据存储交互。

本项目总体设计融合多种技术架构,以满足高效、稳定的运行需求。
前端采用 Nginx 作为反向代理服务器,实现静态资源(HTML、CSS 等)托管,提升加
载速度,同时负责动态 API 请求转发至后端,支持后期负载均衡与高可用扩展。
后端基于 Spring Boot 三层架构(Controller 层处理请求、Service 层封装业务逻辑、
DAO 层借助 MyBatis 操作 MySQL),并利用 Spring Task 执行定时任务(如数据同步、学
习提醒)。
数据存储采用多元化方案:MySQL 存储核心结构化数据(用户信息、学习计划等);
Elasticsearch 提供学习社区高性能搜索;MinIO 实现文件资源(文档、音视频等)的存储与
在线预览;Redis 缓存热点数据(登录状态、帖子热度等),并用 zset 助力个性化推荐。通
过 RabbitMQ 消息队列 实现异步解耦,处理邮件通知、用户行为记录等场景。
项目分为四大功能模块:账号管理模块、学习计划模块、学习社区模块、文件资源模块

其中各模块的层次结构如图:



系统核心实体及关系如下:





在 Ctrl+Learn 学习社区平台中,数据库设计紧扣三大核心模块共 21 张表。其中三大核心模块的表格为:community_post 表支撑学习社区的交流功能,记录用户发帖的标题、内容、互动数据等;file_meta 表管理用户上传的学习资料,支持权限控制、文件分组与共享;plan 表用于学习计划的制定与跟踪,涵盖任务内容、时间设置和完成状态。
帖子表

文件表

学习计划表

三张表共同构建了内容发布、资源管理与学习规划的完整闭环,支撑平台的个性化学习
与资源共享功能。
具体的表逻辑结构如下:
1 用户相关表
| 表名 | 中文注释 | 主键 | 字段名称 | 类型 | 约束 | 中文注释 |
|---|---|---|---|---|---|---|
| user | 用户表 | 是 | id | char(32) | NOT NULL, PRIMARY KEY | 用户 ID |
| username | varchar(20) | NOT NULL, UNIQUE | 用户名 | |||
| password | varchar(100) | NULL | 密码 | |||
| phone | varchar(11) | NULL | 电话号码 | |||
| img | varchar(100) | NOT NULL | 头像路径 | |||
| create_time | datetime | NULL | 创建时间 | |||
| status | char | NOT NULL, DEFAULT '1' | 用户状态(1 启用,2 禁用) | |||
| role | int | NOT NULL, DEFAULT 1 | 用户角色(1 普通用户,2 会员) | |||
| user_head | 用户头像表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| user_id | char(32) | NOT NULL | 用户 ID | |||
| head_url | varchar(100) | NULL | 头像 URL | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| user_statistics | 用户交互信息统计 | - | id | char(32) | NULL | 主键(关联用户 ID) |
| open_file_view | bigint | DEFAULT 0 | 公开文件被浏览次数 | |||
| total_like | bigint | DEFAULT 0 | 总点赞数 | |||
| open_file_preview | bigint | NOT NULL, DEFAULT 0 | 公开文件访问量 | |||
| open_file_download | bigint | NOT NULL, DEFAULT 0 | 公开文件下载量 | |||
| user_storage | 用户存储表 | 是 | id | char(32) | NOT NULL, PRIMARY KEY | 用户 ID |
| total_size | double | NOT NULL, DEFAULT 100 | 总存储空间 (MB) | |||
| used_size | double | NOT NULL, DEFAULT 0 | 已使用存储空间 (MB) | |||
| update_time | datetime | NOT NULL, 自动更新 | 更新时间 |
2 社区帖子相关表
| 表名 | 中文注释 | 主键 | 字段名称 | 类型 | 约束 | 中文注释 |
|---|---|---|---|---|---|---|
| community_post | 帖子表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| user_id | char(32) | NOT NULL | 用户 ID | |||
| title | varchar(100) | NOT NULL | 帖子标题 | |||
| content | text | NOT NULL | 帖子文本内容 | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| like_count | int | NOT NULL, DEFAULT 0 | 点赞数 | |||
| favorite_count | int | NOT NULL | 收藏数 | |||
| comment_count | int | NOT NULL, DEFAULT 0 | 评论数 | |||
| status | int | NULL | 帖子状态(0 未发布,1 已发布) | |||
| community_post_comment | 帖子评论表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| post_id | bigint | NULL | 帖子 ID | |||
| parent_id | int | NOT NULL, DEFAULT 0 | 父评论 ID(0 为一级评论) | |||
| user_id | char(32) | NOT NULL | 用户 ID | |||
| content | varchar(300) | NULL | 评论内容 | |||
| like_count | int | NULL | 点赞数 | |||
| create_time | datetime | NULL | 创建时间 | |||
| reply_user_id | char(32) | NULL | 回复用户 ID | |||
| community_post_comment_like | 帖子评论点赞表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| user_id | char(32) | NULL | 用户 ID | |||
| comment_id | bigint | NULL | 评论 ID | |||
| create_time | datetime | NULL | 创建时间 | |||
| community_post_favorite | 帖子收藏表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| post_id | bigint | NULL | 帖子 ID | |||
| user_id | char(32) | NULL | 用户 ID | |||
| create_time | datetime | NULL | 创建时间 | |||
| community_post_img | 帖子图片表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| img_url | varchar(200) | NULL | 图片网址 | |||
| post_id | bigint | NULL | 帖子 ID | |||
| user_id | varchar(32) | NULL | 用户 ID | |||
| community_post_like | 帖子点赞表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| post_id | bigint | NOT NULL | 帖子 ID | |||
| user_id | char(32) | NOT NULL | 用户 ID | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| community_post_tag | 标签表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| name | varchar(50) | NOT NULL, UNIQUE | 标签名称 | |||
| create_user_id | char(32) | NOT NULL | 创建标签的用户 ID | |||
| create_time | datetime | NOT NULL | 创建标签的时间 | |||
| usage_count | int | NOT NULL | 标签被帖子使用次数 | |||
| community_post_tag_relate | 帖子标签关联表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| post_id | bigint | NOT NULL | 帖子 ID | |||
| tag_id | bigint | NOT NULL | 标签 ID |
3 文件管理相关表
| 表名 | 中文注释 | 主键 | 字段名称 | 类型 | 约束 | 中文注释 |
|---|---|---|---|---|---|---|
| file_folder | 文件夹表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| user_id | char(32) | NOT NULL | 用户 ID | |||
| folder_name | varchar(20) | NULL | 文件夹名称 | |||
| parent_id | bigint | NULL | 父节点 ID(层级关系) | |||
| level | int | NOT NULL | 文件夹层级 | |||
| is_share | int | NOT NULL, DEFAULT 0 | 是否共享(0 不共享,1 共享) | |||
| is_open | int | NULL, DEFAULT 0 | 公开权限(0 不公开,2 公开可预览可下载) | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| file_folder_mistake | 错题文件夹 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| folder_name | varchar(50) | NOT NULL | 错题文件夹名称 | |||
| user_id | char(32) | NULL | 用户 ID | |||
| create_time | datetime | NULL | 创建时间 | |||
| file_meta | 文件表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| user_id | char(32) | NOT NULL | 用户 ID | |||
| parent_id | bigint | NULL | 所属文件夹 ID | |||
| file_name | varchar(50) | NOT NULL | 文件名称 | |||
| file_size | double | NOT NULL | 文件大小(MB) | |||
| create_time | datetime | NOT NULL, 自动更新 | 创建时间 | |||
| is_delete | int | NOT NULL, DEFAULT 0 | 是否删除(0 未删除,1 删除) | |||
| delete_time | datetime | NULL | 删除日期 | |||
| is_open | int | NOT NULL | 文件权限(0 不公开,1 公开可预览,2 公开可预览可下载) | |||
| is_share | int | NULL, DEFAULT 0 | 是否共享文件夹(0 否,1 是) | |||
| file_meta_mistake | 错题文件 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| file_name | varchar(50) | NOT NULL | 文件名称 | |||
| file_size | double | NULL | 文件内存大小(MB) | |||
| folder_id | bigint | NOT NULL | 文件夹 ID | |||
| user_id | char(32) | NULL | 用户 ID | |||
| create_time | datetime | NULL | 创建时间 | |||
| file_permission | 文件权限表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| file_id | bigint | NULL | 文件 ID | |||
| visit_user_id | char(32) | NOT NULL | 访问者用户 ID | |||
| folder_id | bigint | NULL | 文件夹 ID | |||
| permission | int | NULL | 权限(1 可预览,2 预览下载,3 管理员) | |||
| create_time | datetime | NULL | 创建时间 | |||
| host_user_id | char(32) | NOT NULL | 文件所有用户 ID | |||
| type | int | NOT NULL | 权限类型(1 文件权限,2 文件夹权限) | |||
| file_preview | 文件预览表 | 是 | id | bigint | NOT NULL, PRIMARY KEY | 主键 |
| initial_file_id | bigint | NOT NULL | 原始文件 ID | |||
| preview_file_name | varchar(50) | NOT NULL | 预览文件名称 | |||
| create_time | datetime | NULL | 创建时间 |
4 计划任务相关表
| 表名 | 中文注释 | 主键 | 字段名称 | 类型 | 约束 | 中文注释 |
|---|---|---|---|---|---|---|
| plan | 计划表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| plan_name | varchar(20) | NOT NULL | 计划标题 | |||
| category_id | bigint | NOT NULL | 分类 ID | |||
| label | varchar(10) | NULL | 标签 | |||
| start_time | datetime | NOT NULL | 开始时间 | |||
| overdue_time | datetime | NOT NULL | 逾期时间 | |||
| remind_time | datetime | NULL | 提醒时间 | |||
| remark | varchar(200) | NULL | 备注 | |||
| user_id | varchar(32) | NOT NULL | 用户 ID | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| is_complete | int | NOT NULL | 完成状态(0 未完成,1 已完成) | |||
| complete_time | datetime | NULL | 完成时间 | |||
| plan_category | 计划分类表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| category_name | varchar(10) | NOT NULL | 分类名称 | |||
| user_id | varchar(32) | NOT NULL | 用户 ID | |||
| create_time | datetime | NOT NULL | 创建时间 | |||
| plan_sub | 子任务表 | 是 | id | bigint | NOT NULL, PRIMARY KEY, 自增 | 主键 |
| name | varchar(20) | NOT NULL | 子任务名称 | |||
| create_time | datetime | NULL | 创建时间 | |||
| parent_id | bigint | NOT NULL | 父任务 ID | |||
| is_complete | int | NOT NULL | 是否完成(0 未完成,1 已完成) | |||
| user_id | varchar(32) | NOT NULL | 用户 ID | |||
| complete_time | datetime | NULL | 完成时间 |
•关联关系:
◦User 与 Plan:一对多(1 个用户可创建多个学习计划),通过userId外键关联;
◦User 与 FileMeta:一对多(1 个用户可上传多个文件),通过userId外键关联;
◦User 与 CommunityPost:一对多(1 个用户可发布多个帖子),通过userId外键关联;
◦FileMeta 与 AIAnalysis:一对一(1 个错题文件对应 1 份 AI 分析报告),通过fileId外键关联。
•依赖关系:
◦Plan 依赖 EbbinghausUtil 工具类:Plan 的generateEbbinghausCycle()方法需调用 EbbinghausUtil 的calculateCycle(startTime)方法生成复习周期;
◦AIAnalysis 依赖 AgentService:AIAnalysis 的analyzeErrorFile()方法需调用 AgentService 的executeTool(fileId)方法触发 MinIO 文件读取与大模型分析;
◦CommunityPost 依赖 ElasticSearchService:CommunityPost 的searchPost()方法需调用 ElasticSearchService 的queryPost(keyword)方法实现高性能搜索。
•聚合关系:
Category 的categoryId,删除分类时需先处理关联的 Plan(如迁移至 “默认分类”)
类图如下所示:

Ctrl+Learn 平台采用多层次身份验证机制,确保系统访问安全:
多方式账号登录
密码安全机制
分级登录控制
会话安全管理
为保护用户学习数据隐私与安全,平台实施全面数据保护措施:
全链路数据加密
学习内容审核机制
数据备份与容灾
权限隔离设计
全方位输入校验
文件上传安全控制
API安全防护
多终端全面支持
自适应界面设计
用户友好的错误提示
完善的日志系统
标准化状态管理
高可用架构设计
数据持久化策略
资源优化管理
界面设计原则
智能服务稳定性
迭代开发流程
全流程质量测试
| 权限模块 | 具体权限说明 |
|---|---|
| 个人信息管理 | 查看和编辑个人资料、学习偏好设置、修改密码和安全设置、管理学习目标和个人标签 |
| 学习计划管理 | 创建个性化学习计划、调整学习进度和复习周期、查看学习数据统计和分析报告 |
| 文件资源管理 | 上传个人学习资料(PDF、笔记等)、创建和管理文件分类标签、设置文件共享权限、使用智能文档解析 |
| AI学习分析 | 提交错题进行智能分析、查看知识点缺陷诊断报告、接收个性化学习建议、使用学习效果预测 |
| 社区学习互动 | 发布学习笔记和问题求助、评论和点赞他人内容、关注优秀学习者和教师、参与学习话题讨论 |
| 学习成果管理 | 查看个人学习进度图谱、管理错题本和重点标记、导出学习报告和数据、参与学习成就系统 |
这套完整的安全与权限设计确保了Ctrl+Learn平台在提供强大学习功能的同时,保障了用户数据安全和使用体验,为K12和大学生群体创造一个安全、可靠、高效的学习环境。
针对上次需求分析中所存在的问题,我们对类图、系统安全和权限设计进行了完善,讨论补充了系统安全和权限设计上的内容,体现在博客中。
| 学号 | 工作内容 | 贡献度 |
|---|---|---|
| 102300231 | 博客随笔、系统设计和数据库设计答辩PPT | 15% |
| 102300230 | 系统设计说明书、GitCode团队仓库 | 15% |
| 102300232 | 评审表、审核修改系统设计和数据库设计说明书 | 14% |
| 102300227 | 系统设计和数据库设计答辩PPT | 14% |
| 052301436 | 数据库设计说明书 | 14% |
| 292300206 | 数据库设计说明书 | 14% |
| 082300207 | 系统设计说明书 | 14% |
本次作业我们小组以线下会议进行讨论,根据每个人的擅长之处进行了任务的划分,并对上次的作业反馈情况进行总结。
