烤盐人——团队作业四系统设计和数据库设计

这个作业属于哪个课程 <福州大学2021春软件工程实践S班>
这个作业要求在哪里 <团队作业四——系统设计和数据库设计>
团队名称 烤盐人
这个作业的目标 软件系统设计、数据库设计、补充上次答辩问题
其他参考文献 《软件工程》、...

团队开发计划时间安排

阶段 工作内容 里程碑
阶段1(4.24-4.30) 初步编码实现登录注册模块、个人模块 搭建前端静态页面框架、后端完善基础功能接口
阶段2(5.1-5.7) 实现浏览文章模块、社区模块 能够完成文章展示流程,社区基础切换、浏览社区文章
阶段3(5.8-5.14) 实现后台基础管理模块,与后端对接调试 能够进行文章管理以及用户管理等基础后台功能
阶段4(5.15-5.21) 实现帖子具体操作模块、资讯模块 能够进行文章的点赞、收藏、发布以及文章附件相关操作,资讯的页面展示
阶段5(5.22-5.28) 个人、社区模块完善 能够进行个人页面、社区界面完整流程
阶段6(6.1-6.8) 实现树洞模块,后台其他管理功能补充 实现树洞模块,后台的用户管理、通知管理
阶段7(6.9-6.15) UI美化调整,代码测试,修复漏洞 调试修复项目,基础功能完善可用
阶段8(6.16-6.22) 验收调试,总结经验 基本完成期望功能,实现文章的一些高级操作、个人收藏夹、树洞板块以及后台系统的充分管理

团队项目预期开发分工安排

昵称 角色 分工内容
Starlite 产品/前端 协调团队、协助前端、参与部分测试
hannahShaw 产品/前端 前台首页页面
retrospection 前端 前端框架搭建、后台管理界面
Gaoann 前端 登录/注册页面、文章展示
谷雨yu 前端 文章展示、协助后台界面
星夜的风 后端 后端框架搭建、权限管理、安全性控制、接口设计
郑开心 后端 文章部分增删改查(多种查询)
羊一 后端 文章标签、收藏、举报部分增删改查
t0p1Crayon 后端 管理员、公告、评论部分增删改查

系统设计

体系结构设计

image-20210423172616190

​ 本系统分为前后端分离的开发方式,前端框架为vue,页面状态采用vuex进行管理,使用router进行页面跳转,axios进行前后端通信,采用ElementUI作为UI库美化前端界面;后端框架为Spring Boot,后端数据库服务器为MySQL,数据库框架为mybatis-plus+druid连接池,权限管理框架使用sa-Token,前后端交互协议为https,接口文档使用swagger2+knife4j,日志框架为logback,缓存管理框架为redis。

功能模块图

image-20210423120518355

  • 用户包含两种:游客和已注册用户

    image-20210423151914855
  • 游客主要由登录组成、浏览信息组成,浏览信息又由浏览首页、浏览资讯、浏览社区几个模块组成

    image-20210423161102269

  • 已注册用户功能模块则比游客多,由登录注册、浏览信息、操作帖子、树洞、个人设置几个功能模块组成

    image-20210423164843737

  • 其中已注册用户的浏览信息模块由浏览首页、浏览资讯、浏览社区、浏览通知组成

    image-20210423164946234

  • 操作帖子模块则由发布帖子、收藏帖子、点赞帖子、查看帖子、回复帖子、搜索帖子几个主要功能模块组成

    image-20210423164952277

  • 树洞模块则由发布树洞模块组成,而只有发布树洞才可以接收回复树洞,所以发布树洞又包含了接收和回复树洞模块组成

    image-20210423164958195

  • 个人设置则包含了修改个人信息、查看收藏、查看个人发布三个功能模块

    image-20210423165003066

  • 用户文章管理模块由搜索文章、查看文章详情、封禁文章、删除文章等主要功能模块组成

    image-20210423165012232

  • 操作用户主要由搜索用户、查看用户详情、删除用户这些主要功能模块组成

    image-20210423165016000

  • 操作通知主要由搜索通知、删除通知、发布通知、查看通知详情这些主要功能模块组成

    image-20210423165025967

  • 官方文章管理模块主要有查看官方文章、搜索官方文章、发布官方文章、删除官方文章这些功能模块组成

    image-20210423165036417

ER分析

部分ER图

  • 用户-博客

    思路: 在表的设计中用户和博客间的的关系有两种:

    一是用户可以发表博客,两者通过博客中的用户id外键关联,一个用户可以发表多篇博客,二者是一对多的关系;

    二是用户可以收藏博客,有一个收藏表,用户id和博客id都作为外键,一个用户可以收藏多篇博客,每篇博客可以被多个用户收藏,所以二者是多对多的关系。

    img

  • 博客-评论

    思路: 博客和一级评论表的关系是拥有关系,即博客拥有评论,二者通过一级评论表的博客id作为外键关联,一篇博客可以有多个评论,因此两者之间是一对多的关系

    img

  • 博客-模块

    思路: 博客和模块的关系是拥有关系,即博客属于模块,模块拥有博客,两者通过博客中的模块id外键关联,一个模块可以拥有多篇博客,因此二者是一对多的关系。

    img

  • 博客-附件

    思路: 博客和附件的关系是拥有,即能在博客中上传附件,两者通过附件表中博客id作为外键关联,一篇博客可以有多个附件,因此两者是多对多关系。

    img

  • 博客-标签

    思路: 博客和标签的关系是拥有关系,即博客拥有标签,有一个博客标签表,博客id和标签id都作为外键,一个博客可以拥有多个标签,一种标签可以被多个博客拥有,所以二者是多对多的关系。

    img

整体ER图

ER图

表结构设计

  • 用户表 account
    • 索引:主键索引
字段名 数据类型 数据长度 主键 非空 注解
name char 32 用户名
nickname char 32 用户昵称
password char 64 登陆密码
status char 4 标识用户身份
email char 64 用户绑定的邮箱
avatar char 64 用户头像
slogan char 256 个性签名
  • 用户兴趣度表 account_interest

    • 主键:id
    • 外键:account_name、blog_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 ID
account_name char 32 用户名
blog_id int 10 博客ID
interest float 0 兴趣度
  • 附件表 attachment
字段名 数据类型 数据长度 主键 非空 注解
id int 10 ID
name char 64 附件名
  • 博客表 blog

    • 外键:module_id、author(account.name)
    • 索引:module_id、author
字段名 数据类型 数据长度 主键 非空 注解
id int 10 唯一标识博客的字段
module_id int 10 博客所属模块id
author char 32 作者名字
title varchar 256 博客标题
content text 0 博客内容
release_time datetime 0 发布时间
like_number int 10 点赞数
collection_number int 10 收藏数
state tinyint 4 博客状态
  • 博客_附件关联表 blog_attachment

    • 外键:blog_id、attachment_id
    • 索引:blog_id、attachment_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10
blog_id int 10 博客ID
attachment_id int 10 附件ID
  • 博客_模块关联表 blog_module
字段名 数据类型 数据长度 主键 非空 注解
id int 10 模块ID
name char 32 模块名称
  • 博客_标签关联表 blog_tag

    • 外键:tag_id、blog_id
    • 索引:tag_id、blog_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 ID
tag_id int 10 标签ID
blog_id int 10 博客ID
  • 收藏表 collection

    • 外键:account_name、blog_id
    • 索引:account_name、blog_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 收藏ID
account_name int 10 用户名
blog_id int 10 博客ID
  • 一级评论表 first_comment
    • 外键:author、blog_id
    • 索引:author、blog_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 评论ID
blog_id int 10 博客ID
author char 32 发布者姓名
content text 0 评论内容
release_time datetime 0 发表时间
  • 二级评论表 secondary_comment
    • 外键:comment_id、author、account_name
    • 索引:comment_id、author、account_name
字段名 数据类型 数据长度 主键 非空 注解
id int 10 评论ID
comment_id int 10 被评论评论ID
author char 32 发布者姓名
account_name char 32 被评论用户
content text 0 评论内容
release_time datetime 0 发表时间
  • 公告表 notice
    • 外键:account_name、author
    • 索引account_name、author
字段名 数据类型 数据长度 主键 非空 注解
id int 10 公告ID
author char 32 作者
title varchar 256 公告标题
content text 0 公告内容
release_time datetime 0 发表时间
account_name char 32 接收用户
  • 权限表 permission
字段名 数据类型 数据长度 主键 非空 注解
id int 10 权限ID
name char 32 权限名称
  • 角色表 role
字段名 数据类型 数据长度 主键 非空 注解
id int 10 角色ID
name char 32 角色名称
  • 角色_权限关联表 role__permission
    • 外键:role_id、permission_id
    • 索引:role_id、permission_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 ID
role_id int 10 角色ID
permission_id int 10 权限ID
  • 标签表 tag
字段名 数据类型 数据长度 主键 非空 注解
id int 10 标签ID
name char 32 标签名称
  • 举报表 tip_off
    • 外键:blog_id
    • 索引:blog_id
字段名 数据类型 数据长度 主键 非空 注解
id int 10 ID
blog_id int 10 被举报博客ID
count int 10 举报数量

数据库设计

类图

image-20210501124305320

思路

  1. 晒研论坛作为一个考研信息论坛,最主要的就是承载信息的文章类以及用户类。文章类拥有基础的标题、内容、作者、时间等,这些都作为文章的数据属性而存在;用户则有账号、密码、邮箱等基础数据属性。
  2. 其次考研论坛也应该拥有多个子板块,所以添加设计了板块类以及文章分类可用的标签类。
  3. 相应的文章拥有许多操作:点赞、收藏、评论、举报,这些记录也都一一构成类,其中评论还能分为一级二级评论。同时文章有携带附件的需求,就产生了附件类。
  4. 我们晒研论坛的用户也有划分:普通用户、管理员,他们之间的权限,角色也应该成为类。

系统安全和权限设计

系统安全

前后端数据传输

前后端接口我们使用https协议,该协议会在传输层对传输的数据进行加密,可以防止一些抓包工具获取明文数据。主要优点有:内容采用混合加密技术,中间者无法直接查看明文内容;通过证书验证客户端访问的是自己的服务端;数据进行签名加密,可以防止数据被冒充或篡改。

传输数据进行过滤

为了防止XSS攻击、SQL注入攻击,后端会先对传输的数据进行过滤,然后再处理过滤后的数据。

数据库加密储存

为了防止数据库泄露或其它情况造成的用户私密信息(如登录密码等信息)泄露,所有存储在数据库中的私密数据都是加密后再存储的。用户登录密码会进行 md5(加盐)加密后存储在数据库中。

前端使用验证码

前端发送验证码的按钮设置两次的间隔时间为60s,防止被恶意刷按钮造成后端大量请求阻塞。

密码安全等级

用户注册的时候对密码的安全等级进行要求,必须达到一定的安全等级才能注册成功。

密码防爆破

用户连续输错密码三次后需要等待5分钟才能再次输入,用户连续输错密码5次后将发送邮件给用户示警。

接口防爆破

后端使用拦截器拦截用户的每次请求,如果某个用户在短时间内频繁大量访问同一个接口,该请求将会被拦截。

token验证身份

为了防止CSRF攻击,我们将会使用jwt机制,每一次后端请求将会检查经过签名后的token数据,如果非法将禁止访问。

唯一登录

每个用户在同一时间段仅能维护一个登录的客户端,用户最新一次的登录将会把用户上次的登录踢下线。

权限设计

游客、封禁用户

仅支持博客、评论、各个板块的查询功能

普通用户

博客、评论、板块的增加、删除、修改、查询

收藏、举报博客

接收公告

树洞功能

管理员

用户、博客的封禁

用户统计数据

博客统计数据

回答问题

  1. 考研论坛需要能够分享文件,以满足同学在搜索具体考研信息时的需求。

    ​ 对于这一需求我们认真分析了一下,决定采用文章可携带文章附件的形式,这样既能保持文章的可读性,同样也能拥有附带文件的便利性,这一文件功能主要就是同类部分关键资源的交流分享。

    ​ 同样在类图和er图中我们也添加了文章附件的描述。

    image-20210423205953304

    image-20210423210001245

  2. 用况图中用况之间的关系描述不足。

    我们这次重新绘制了用况图

    img img

团队分工

工作流程

现在团队内进行任务划分

每个人工作完成后上传到团队文档仓库共享进度

最后由文档整理的同学整合排版

过程中采用github project进行项目管理

组员分工

学号 昵称 分工内容
221801314 Starlite 博客整理、数据流图、工作计划制定、答辩
221801226 hannahShaw 体系结构设计+功能模块、前端工作计划制定
221801235 retrospection 接口设计文档、评审表制作
221801203 Gaoann 系统设计文档
221801127 谷雨yu 体系结构设计+功能模块、UML图修改、数据流图
221801334 星夜的风 数据库设计、系统安全性和权限设计、接口设计文档、后端工作计划制定
221801319 郑开心 数据字典整理、ER图+表结构设计、数据库文档辅助
221801325 羊一 数据库设计文档、ppt制作
221801310 t0p1Crayon ER图+表结构设计、数据库文档辅助

贡献度比例

学号 昵称 贡献度
221801314 Starlite 16.7
221801226 hannahShaw 8.3
221801235 retrospection 10.4
221801203 Gaoann 6.25
221801127 谷雨yu 14.6
221801334 星夜的风 14.6
221801319 郑开心 10.4
221801325 羊一 12.5
221801310 t0p1Crayon 6.25

链接

团队仓库链接

团队作业4仓库

文档github链接

系统设计说明书

数据库设计说明书

系统设计数据库设计答辩ppt

在线文档链接

系统设计说明书--在线预览

数据库设计说明书--在线预览

系统设计数据库设计答辩ppt--在线预览

posted @ 2021-04-23 18:43  烤盐人  阅读(255)  评论(9编辑  收藏  举报