小组名
软小五比奇堡乐园
项目名
软件工程导论实践教学管理平台
小组成员
张凯航(PM)、李林畅、李佳豪、牟洺楷、张恩硕
数据库简介
数据库(DataBase,DB):指长期保存在计算机的存储设备上,按照一定规则组织起来,可以被各种用户或应用共享的数据集合。
数据库管理系统(DataBase Management System,DBMS):指一种操作和管理数据库的大型软件,用于建立、使用和维护数据库,对数据库进行统一管理和控制,以保证数据库的安全性和完整性。
用户通过数据库管理系统访问数据库中的数据。
数据库软件应该为数据库管理系统,数据库是通过数据库管理系统创建和操作的。
数据库:存储、维护和管理数据的集合。
数据库整体设计
针对本次团队项目而言,由于各功能模块均与用户有关,同时又有一定的独立性,数据库的表可以分模块设计,而每个模块与用户表有关。
本设计包含以下模块:
- 用户权限管理模块
- 教材与进度管理模块
- 教材工具编辑请求模块
- 项目管理模块
- 作业管理模块
- 班级课程管理模块
数据库整体设计图如下:
可以看到,用户表居于中间位置,各模块相关表从左上角开始顺时针出现。
用户权限设计
用户权限设计已经有相对规范的一套体系,故应上网找相关资料来较合理地设计。
基本的表应包含用户表、角色表、权限表。
管理权限时,通过为角色分配权限,为用户分配角色来达到给用户分配权限的目的。
故在基本的表上还应包含用户角色联系表,角色权限联系表。这两个表只需要一个主键,两个来自联系表的外键即可。
如需要分组管理,可以添加角色组表、权限组表以及对应的联系表。
如需要查看分配日志,可以添加角色或权限联系的添加日志表。
如需要记录登录日志,比如包含登陆方式时间等登陆相关的信息,可以添加登录表,将用户表细分,用户表包含用户信息,登陆表包含登录信息。
如有其他需要,可以在基础表之上添加其他的表。
以下是本组的用户权限管理表设计图,只选择了基础的表,向外的联系为用户表:
教材与进度管理设计
书籍管理
类似于书籍类的数据结构可以用树状结构存储,只需要为每个章或节添加编码,如书籍的第一个版本为1,第一个版本第一个章为1.1,第一个版本第一个章的第一个节为1.1.1,以此类推。
每个节点包含的内容类型应大体相同,如果不是叶节点,其内容也可作为本章或本节内容简介。
表设计应包含本节点包含内容,本节点编号,父节点编号。
进度管理
对于进度管理,可以为每个节点添加任务点,通过任务点的完成数量来实现进度管理,故应添加两个表:任务点表、任务点与用户联系表
任务点表应包含本任务点内容,如果有多种任务点类型,可以添加任务点类型条目,然后将所有种类应有的条目全部包含在表内;也可以每种类型分别设计表。
表设计应包含对应章节节点id,以及对应的任务点内容。
然后添加任务点与用户联系表,包含来自用户与任务点的外键即可。
以下是本项目的教材与进度管理设计图,向外联系为用户:
编辑请求设计
如果需要有权限的用户编辑某部分内容,有两种实现方式:
- 一种是在该部分的表添加审核相关属性(上传时间、审核状态、审核通过时间、上传人、审核类型等),系统内置的条目的该属性可以为默认,也可以自定,由某用户上传的请求也存于该表。只有审核通过的条目可以展示出来。
- 另一种是额外添加审核表,包含该部分的上传所需要的内容(原先的表会包含许多与审核无关的属性,如下载量等后续才会补充的内容)与审核相关属性。如果该审核通过,将该审核包含的内容添加到原有的表中。展示时直接展示原有的表所有条目。
以下为项目与项目审核表设计,向外联系用户:
如果审核的内容有较大区分,可以添加不同类型的审核内容表。审核表包含审核基本信息,不包含内容,不同类型审核内容表包含对应的内容,包含来自于审核表的外键。
以下为教材审核表,审核内容分为教材内容与任务点内容,向外联系用户:
课程班级设计
设计思路如下:
- 行政班级并不重要,仅放在用户表中作为用户属性
- 教学班级表:每个教学班级包含多个课程
- 课程表:包含来自教学班级的外键
- enroll表:联系教学班级、教师、学生的表,包含三部分的外键
如需要包含其他信息,如学校等,可以对某个表额外添加外键,但事实上仅为方便,类似于学校的信息可以通过与用户表与学校表的链接获取。
以下为该部分的表设计,向外的表大部分为用户表,表内表现为外键,少部分为与该部分相关的表,表内无外键:
补充
表之间关系
两张表一共四种:一对一、一对多、多对一、多对多。
但是个人不建议两个表之间用多对多的关系,如有需要,在两表之前添加联系表,包含该表主键、来自两个表的外键。
这样的话,甚至可以联系多张表,只需要添加相关表的外键即可,见班级课程表的enroll表设计,如果学生与教师为两张表(不建议),就实现了三张表(教学班级、学生、教师)的联系。
主键设计
本数据库设计的主键均为bigint类型,为自增主键。但是有一种说法是不建议使用自增主键,测试的时候不方便以及缺乏意义,如果可以的话,建议采用包含意义的主键设计,此时需要注意主键的唯一性、外键引用的规范性等一系列问题。
命名方式
网上现有多种命名方式,表前缀、功能前缀、大小写规定等。
本设计采用以下规则:
- 蛇形命名法,单词见用下划线('_')链接
- 字母均大写,未来的sql的其他语句用小写
- 表名前加前缀T_
- 属性名加表名作为前缀,不包含T_
- 外键与对应表主键命名相同
- 名词过长时用缩写,如角色权限联系表T_ROLE_PERMISSION_RELATION简写为T_RP_RELATION,但是一定要写注释