数据库课程设计
课程要求
数据库课程设计课程定位
- 数据库课程设计的目的是让学生在掌握数据库的相关理论知识后,将数据库与软件开发相结合,熟练掌握数据库设计和基于数据库的应用程序开发
- 课程要求学生选用主流DBMS,自选某种高级程序设计语言,实现一个完整的以数据库为核心的应用系统。开发工具和系统体系结构由学生自选
数据库课程设计目标
- 在仿真实战环境下开发一个以产品化为导向的基于数据库的应用系统
- 掌握设计实现一个完整的产品化导向的数据库应用系统的流程和方法,包括需求分析、数据库设计、应用程序设计、编码、测试等
- 熟悉对数据库的操作,包括数据库连接、SQL、完整性约束、索引,以及视图、触发器、存储过程等数据库对象的综合运用**
- 加深理论基础:关系数据库、数据库设计、事务
- 加强开发工具使用、编程经验、交流能力
成绩评定
- 第一次课堂演讲—系统需求分析与设计:30分
功能方面需求分析(10分)、性能及其他需求分析(5分)、数据库设计(15分) - 第二次课堂演讲—系统演示(30分)
在课堂演示自己的系统,每位同学演示自己最有代表性的三个功能(不包括系统登录和系统退出功能)
功能(15分)、健壮性(10分)、易用性(5分) - 课程设计报告40分(国庆节放假后上传至FTP服务器)
数据库概念设计和逻辑设计(20分)、数据库规划、系统定义、需求分析(15分)、物理设计和其他(5分)
微信小程序课程设计报告
班级:大数据2班 学号:202100300067 姓名:李景宸
一、系统开发平台
- 前端: UniApp + Vue 构建微信小程序
- 后端: SpringBoot + MyBatis/JPA
- 数据库: MySQL
- 缓存: Redis 实现消息队列
- 鉴权: JWT 进行用户鉴权
- 部署: 微信小程序 + 华为云耀云服务器
- 编译器:微信云开发 + HBuilderX + IDEA
二、数据库规划
2.1 任务陈述
本课程设计的任务是开发一个论坛微信小程序及其后台管理系统。论坛小程序可以让用户发帖、回帖、点赞、收藏等,实现用户之间的交流。后台管理系统可以管理用户、帖子、违规内容等,保证论坛的正常运转。开发这个项目的目的是练习使用UniApp、Vue、SpringBoot、MySQL等技术,并综合运用所学知识开发微信小程序和后台管理系统。通过完成这个项目,可以提高自己的编码和开发能力,为今后从事开发工作打下基础。
2.2 任务目标
- 用户可通过微信小程序注册登录、发帖回帖、点赞收藏等
- 实现帖子列表、详情、搜索等功能
- 后台可管理用户、帖子、违规内容等
三、系统定义
3.1 系统边界
- 用户端:微信小程序,实现论坛功能
- 管理端:后台管理系统,管理用户、帖子等数据
- 数据存储:MySQL数据库,存储用户、帖子、评论等数据
- 身份认证:使用JWT实现用户认证
- 接口服务:SpringBoot提供接口服务
- 消息队列:使用Redis实现消息队列
- 部署环境:微信小程序 + 华为云服务器
3.2 用户视图
普通用户视图
- 注册/登录:可以通过微信快速注册和登录小程序
- 发帖:在指定分类下发表帖子
- 回帖:在帖子下进行回复讨论
- 点赞收藏:对感兴趣的帖子进行点赞或收藏
- 查看帖子:可以查看不同分类下的帖子列表或搜索帖子
- 个人中心:可以查看和编辑自己的个人信息
管理员视图
- 登录系统:管理员需要通过账号密码登录后台系统
- 用户管理:可以查看所有用户,也可以封禁不良用户
- 帖子管理:可以浏览、删除、修改所有帖子
- 词库管理:可以增加违规关键词
- 数据统计:可以查看各种数据统计图表,如用户量变化、活跃度等
四、需求分析
4.1 用户需求说明
4.1.1 数据需求
用户表(User):存储用户信息,包括微信openid、头像、用户名等基本信息。注意openid和用户名的唯一性。
帖子表(Post):存储帖子信息,包括标题、内容、作者等。注意作者须关联用户表,一篇帖子对应一个用户。
收藏表(Favorite):存储用户的收藏记录,包括收藏的帖子。注意用户和帖子的关联关系。
关注表(Follow):存储用户之间的关注记录,包括谁关注了谁。注意避免重复关注。
评论表(Reply):存储帖子下的回复评论,包括评论内容和所属的帖子。注意评论与帖子和用户的关联。
管理员表(Administrator):存储管理员信息,包括账号和密码。注意账号的唯一性。
违规词表(Word):存储违规关键词,用于帖子审核。
需要根据业务需要设计表关系,如一篇帖子可以有多条评论,一个用户可以收藏多篇帖子等。
4.1.2 事务需求
- 用户注册 - 新增用户信息到数据库
- 用户登录 - 查询用户信息,验证登录
- 发布帖子 - 新增帖子信息到数据库
- 点赞帖子 - 更新帖子的点赞数
- 收藏帖子 - 新增收藏记录到数据库
- 发表评论 - 新增评论信息到数据库
- 用户关注 - 新增关注记录到数据库
- 加载帖子 - 从数据库查询帖子信息
- 加载评论 - 从数据库查询评论信息
- 搜索帖子 - 根据标题关键词搜索帖子
- 封禁用户 - 更新用户状态为封禁
- 删除帖子 - 从数据库删除帖子
- 统计分析 - 从数据库统计各种数据
这些都是系统需要完成的主要事务处理。发布、评论、收藏等用户操作要新增数据;加载、搜索、统计等要查询数据库。
4.2 系统需求说明
数据库初始大小:考虑到初期用户量和数据量不大,数据库可先规划为1GB左右。
用户增长速度:按每月新增用户1000计,每月帖子量新增2000计。
安全性:用户密码需加密存储,接口请求需认证,防止注入攻击。
接口性能:重点接口如发帖、评论等耗时需控制在200ms以内,确保响应速度。
图片存储:上传图片可先存储在服务器,也可以使用云存储服务。
容灾考虑:数据库可配置主从复制,Redis和应用服务器考虑搭建集群。
扩展性:数据库和存储可按需水平扩展,缓存和应用服务器也可以横向扩展。
需要根据实际情况评估需求,给数据库和服务器提前留足扩展空间,应对未来增长。
五、数据库逻辑设计
5.1 ER图
5.2 数据字典
根据ER图和数据库设计,数据字典如下:
表名 | 字段名 | 字段类型 | 可否为空 | 说明 |
---|---|---|---|---|
User | user_id | int | 否 | 用户ID,主键 |
User | openid | varchar | 否 | 用户的微信开放ID |
User | nickname | varchar | 否 | 用户昵称 |
User | avatar | varchar | 是 | 用户头像 |
User | register_date | datetime | 否 | 注册时间 |
User | last_login | datetime | 是 | 最后登录时间 |
User | status | tinyint | 否 | 用户状态 |
Post | post_id | int | 否 | 帖子ID,主键 |
Post | title | varchar | 否 | 帖子标题 |
Post | content | text | 否 | 帖子内容 |
Post | openid | varchar | 否 | 发帖用户ID |
Post | post_time | datetime | 否 | 发帖时间 |
Post | type | tinyint | 否 | 帖子类型 |
Reply | reply_id | int | 否 | 回复ID |
Reply | post_id | int | 否 | 帖子ID |
Reply | user_id | int | 否 | 用户ID |
Reply | content | varchar | 否 | 回复内容 |
Reply | last_user_id | int | 否 | 上条回复ID |
Favorite | id | int | 否 | 收藏ID |
Favorite | post_id | int | 否 | 帖子ID |
Favorite | user_id | int | 否 | 用户ID |
5.3 关系表
根据你提供的ER图和数据库设计,主要的关系表分析如下:
- 收藏表(Favorite)
- 该表建立了用户和帖子之间的收藏关系。
- 用户可以收藏多个帖子,帖子可以被多个用户收藏。
- 所以它的两个外键分别关联用户表(User)和帖子表(Post)。
- 关注表(Follow)
- 该表建立了用户之间的关注关系。
- 每个用户可以关注或被关注多个用户。
- 所以它的两个外键都关联的是用户表(User)。
- 评论表(Reply)
- 该表存储对帖子的评论。
- 每条评论属于一个帖子和一个发表评论的用户。
- 外键关联帖子表(Post)和用户表(User)。
- 管理员表(Administrator)
- 该表存储管理员信息,与其他表关系不大。
六、数据库物理设计
6.1 索引
用户表(User):
- 在openid字段创建唯一索引,加速根据openid查询用户信息
帖子表(Post):
- 在post_id字段创建主键索引,加速主键查询
- 在title字段创建普通索引,加速根据标题搜索帖子
评论表(Reply):
- 在post_id字段创建普通索引,加速根据帖子id查询评论
- 在user_id字段创建普通索引,加速根据用户id查询评论
收藏表(Favorite):
- 在user_id和post_id创建复合索引,加速根据用户id和帖子id查询收藏关系
关注表(Follow):
- 在user_id和followed_user_id建立复合索引,加速查询关注关系
6.2 视图
- 用户视图
注册/登录视图:使用微信授权登录,无需注册即可使用。
个人主页视图:显示用户信息,发布的帖子,关注人等。
用户管理视图:提供修改资料,更改密码等功能。
- 帖子视图
发帖视图:创建帖子的输入框,支持文本、图片、视频等。
帖子列表视图:以列表形式展示帖子标题、作者等信息。
帖子详情视图:显示整个帖子的全文内容。
- 评论视图
评论输入视图:在帖子下方提供评论输入框。
评论列表视图:展示对帖子的评论。
- 管理员视图
用户管理视图:列表显示用户,可批量处理。
帖子管理视图:可查看并筛选全部帖子,进行删除、封禁等操作。
数据统计视图:用图表呈现系统各类关键指标。
6.3 安全机制
- 用户认证
- 接入微信授权登录,验证用户身份
- 管理员账号使用用户名密码认证
- 对关键操作进行 TOKEN 验证
- 数据加密
- 对用户密码、支付密钥等敏感数据加密存储
- HTTPS 加密通信传输
- 权限控制
- 不同用户角色设置不同访问权限
- 匿名用户只能浏览,不能发帖等操作
- 防注入
- 输入内容过滤,对特殊字符进行转义处理
- 参数校验,避免 SQL 注入等漏洞风险
- 日志审计
- 记录用户操作日志,用于事后审计
- 对重要操作发送管理员提示
- 内容审核
- 人工和自动双重审核机制,审查不良内容
- 建立黑名单词库,自动过滤
七、应用程序设计
7.1 功能模块
模块 | 相关数据库表 | 主要功能 |
---|---|---|
用户管理 | User | 用户注册、登录、管理 |
帖子管理 | Post | 发帖、浏览帖子、搜索 |
评论管理 | Reply | 发表、浏览评论 |
收藏点赞 | Favorite | 用户收藏、帖子点赞 |
关系管理 | Follow | 用户关注、黑名单等 |
权限管理 | Administrator | 管理员的权限控制 |
内容审核 | Word | 屏蔽敏感词、检测违规 |
数据统计 | 多个表联合 | 数据报表、分析 |
每个功能模块会涉及一个或多个数据库表,例如帖子模块需要访问Post表,评论需要访问Reply表。将系统划分为功能模块有助于梳理系统需求和设计数据库。
7.2 事务设计
事务的粒度:每一个业务操作是否需要设计为一个事务,既保证原子性又不影响性能。
并发控制:可能引起数据不一致的并发操作,需要加锁或优化事务隔离级别。
数据一致性:事务提交或回滚后应确保数据一致,避免数据损坏。
故障处理:系统故障时需要事务回滚,保证不将部分失败事务提交。
性能优化:合理设置事务大小,避免长事务影响性能。
日志记录:重要的事务操作需要留存日志,用于审计。
deadline控制:针对时效性强的事务,需要设置事务最长执行时间。
优先级划分:重要的事务可以优先执行,而非核心事务可以延后。
数据校验:事务中对数据的完整性、一致性进行校验。
需要根据具体业务需求来设计事务,在保证数据一致性的前提下,优化事务的性能。
八、测试和运行
用户端
1.推送帖子
2.发帖
3.个人中心
4.历史记录
5.评论区
6.分享
九、总结
本次课程设计开发了一个论坛微信小程序及对应的后台管理系统。在项目开发过程中,我对论坛类应用的功能需求进行了完整的分析,包括用户系统、帖子系统、评论系统等模块,并设计了数据库模型来满足这些功能需求。
通过绘制ER图,我设计出了六张关键表,包括用户表、帖子表、评论表等来存储系统核心数据。同时,针对可能存在的性能瓶颈,我分析了可以建立的数据库索引,以加速系统执行查询操作的速度。在保证原子性和一致性的前提下,我还研究了系统中的主要业务事务,如发帖、点赞等操作过程,以保证事务的正确性。
此外,我详细思考了系统的非功能需求,比如性能、安全性、可用性等方面的考虑。例如预计系统的初始规模和未来扩展性,保证系统能顺应业务增长趋势。我采用了JWT机制来进行用户认证和访问控制,保护系统安全。我还根据界面和交互的需要,设计了用户管理、帖子列表等关键页面的视图原型。
通过这次项目的开发,我对论坛类应用的整体功能和系统架构有了更深刻的理解。学会了绘制ER图设计数据库模型,进行性能和事务相关的分析,并考虑非功能需求。这些经验和技能对我今后的项目开发都大有帮助。总体来说,这个课程设计锻炼了我对系统进行全面需求分析和设计的能力,让我受益匪浅。
附. 参考文献
Spring Boot 中文文档 (springdoc.cn)