单纯从交互图抽离建立映射关系,不符合3NF,会导致一些代码冗余,耦合交错,以及表的冗余,随着系统逐渐扩容,分库分表也会逐步困难,怎么样用一种较为先进建模方法为标尺进行构筑?本文做一些详细的分解阐述。
设计一个大型软件系统,就像设计一座高楼大厦,需要各种各样的“图纸”。在软件设计中,一般把类似于“图纸”的部分称为“模型”,并把设计软件模型的过程称为“软件分析建模”。
李凯教授曾对存储的意义思索了一年,花一些时间在本质问题上的思索还是值得的。
通常一个系统的架构至少要从实体关系层、业务逻辑层和表现层等层次考虑。万丈高楼从地起,实体关系层(或者说数据模型)永远是最重要的。对一个项目,我通常会首先花一个月的时间对实体关系做仔细的分析和设计,而其要点是实体及关系的设计要用一条清晰、简洁的关系脉络将各实体间的关系表现出来。
所谓实体关系的清晰脉络,就是要找到若干核心实体并围绕核心实体来构造关系,非核心实体之间的关联尽量通过核心实体实现,避免随意的相关。这样的设计通常会导出若干聚焦的实体团块,团块内部关系密切,团块之间关联简洁。这样设计的好处是既符合实体的现实关联方式,也有利于在实现分布存贮时分割。
以下这张图兼具美感,系统大约在31张表,如下图所示:
曾对一些系统做逆向工程,无法还原ERD,大于50表的系统,如果不进行建模,后续系统会越来越臃肿,依然需要进行重构。
一个健全的系统,包括以下几种元素:
大体上分析的步骤如下所示:
(1)SWOT分析
(2)思维导图
(3)BPMN详细勾勒
(4)DFD数据流程图
(5)ERD建模
一、什么是SWOT分析?
公司需要了解其业务环境的变化才能实现业务目标。SWOT分析通常用于企业的战略决策。在战略规划中,SWOT应该被视为一种常用的分析方法,即力量-竞争优势,劣势-劣势,机会,威胁。
优缺点是公司(产品)的内部因素,受产品质量,材料,人员,机器,渠道和服务等因素影响。机会和威胁是公司(产品)的外部因素,并受市场,经济,社会和政策的影响。SWOT的分析指导组织确定产品的优势,劣势,机会和威胁。只有更好地了解自己,了解对手并了解环境,才能保持适应性,并更快,更好地应对变化。
SWOT分析一目了然:
二、什么是思维导图?
思维导图是使用最广泛的想法管理工具之一。
这是一张视觉地图,显示您的想法。
三、什么是数据流程图?
数据流图(DFD)是软件设计中经常使用的图。它直观地表示给定系统中整个过程的数据流。
DFD显示将输入到流程和从流程输出的信息的种类以及数据的存储位置。
思维导图是使用最广泛的想法管理工具之一。
这是一张视觉地图,显示您的想法。
DFD类型
DFD有两种主要类型:物理和逻辑。
物理DFD:通过显示“如何”实施系统,着重于系统的物理方面
逻辑DFD:着眼于系统的更高层次及其实现的“目的”。
【实验教学管理系统需求分析】:
4.1、需求获取
4.1.1、获取业务需求
信息工程学院的实验数据如实验报告、实验室使用记录、实验仪器使用记录等都采用纸质记录,造成保存不便,统计检索速度慢、不准确,管理繁琐,数据不完整等。
实验教学管理系统能够实现实验数据电子化,方便对实验教学过程中产生的数据进行管理,节约教师学生实验时间、节约人力物力资源,方便教学管理人员对数据进行统计分析,提高实验教学管理效率,促进管理规范化、信息化、正规化。
4.1.2、获取用户需求
系统主要角色分三类:学生、教师、管理员。
管理员所需主要功能包括:
学生管理、教师管理、机构管理、课程管理、课表管理、仪器使用记录管理、实验室、管理、统计管理、课表管理、管理员管理、注销等功能。
教师所需主要功能包括:
个人信息管理、实验室使用记录管理、师生交流、批改报告、实验报告成绩管理、实验项目管理、注销等功能。
学生所需主要功能包括:
个人信息管理、仪器使记录管理、师生交流、实验报告管理、查看实验报告成绩、注销等功能。
①加工说明
添加:教师填写实验项目名称、类型、学时、目标、内容等信息,验证合格后保存到实验项目表中。
查询:教师可以查看自己课程的实验项目,选择一个可以查询项目详细信息。
修改:教师查看项目列表,选择需要修改的项目,读取原来的内容,进行修改,验证合格后将项目保存到实验项目表中。
删除:教师可以删除一个或多个项目。
统计:管理员可以统计一门课程的项目数,可按学期、专业统计实验类型、实验数量、类型比率等统计。
②数据流说明
添加项目请求:教师添加实验项目的请求。
查询请求:教师查询本人添加的实验项目请求。
删除请求:教师请求删除选定的实验项目请求。
修改请求:教师请求修改选定的实验项目的请求。
添加的项目:教师新增的实验项目。
删除的项目:选定的需要删除的实验项目。
修改的信息:教师修改后的实验项目。
统计请求:管理员统计实验项目的请求,包括根据学期、课程、实验类型等条件的请求。
项目统计信息:根据管理员输入的条件,返回统计信息。
项目信息:实验项目的信息,包括项目名称、性质、学时、项目要求等。
③数据存储及数据项说明
实验项目表=项目ID+项目名称+项目类型+项目目的+项目环境+项目状态+开课课程+教师ID+开设学期。
项目ID:整型,长度11,不允许为空。
项目名称:字符类型,长度20,不允许为空。
项目类型:字符类型,长度20,不允许为空。
项目目的:字符类型,长度255,不允许为空。
项目环境:字符类型,长度255,不允许为空。
项目状态:字符类型,长度11,不允许为空。
开课课程:字符类型,长度11,不允许为空。
教师ID:整型,允许空。
开设学期:字符类型,长度11,不允许为空。
2)实验报告管理可以细化为批改、导出、成绩统计、查看、修改、添加、查看成绩7个子加工,每个加工都要同实验报告表进行交互,为了避免数据流交叉,将实验报告表出现2次。与数据存储相连的数据流可以没有名称,其他数据流必须有名称,如图2-5所示:
①加工说明
添加:学生请求添加实验报告,按照实验学期、项目、姓名、班级、实验室,填写实验目的、内容、结论等信息,验证合格后保存到有以实验报告表中。只有已提交的实验报告,教师才能看到。
查看:学生可以查看所有实验报告(提交的和未提交的)、教师能查看所有提交的实验报告。
修改:学生可以查看自己所有的实验报告,选择一个查看详情并请求修改,将修改信息填写完成后,验证合格保存到实验报告表中。
批改:教师能够查看自己课程的所有学生提交的实验报告,选择一个查看详情进行批改,批改要写评语和给出实验成绩。
导出:教师可以按实验项目导出所有学生提交的实验报告。
成绩统计:教师批改完成后可以查看所有学生的成绩,统计出及格、不及格、优秀学生人数。
查看成绩:教师批改后,学生在实施报告列表中可以看到实验成绩,通过详情可以看到教师的评语和成绩。
②数据流说明
批改请求:教师请求批改选择的实验报告。
成绩:教师录入的实验报告成绩。
查询请求:教师查询实验报请法度,请求的条件可根据实验项目和实验班级来查询。学生的查询请求依据学生本人信息和课程来查询。
导出请求:教师请求导出一个班的某个实验项目的所有实验报告请求。
添加报告请求:学生请求添加实验报告。
实验报告:包含课程信息、实验项目、实验室、教师、学期、实验目的、实验要求、实验内容、实验结果等信息的实验报告。
拒绝信息:教师批改实验报告后,学生提出请求修改实验报告被拒绝的信息。
③数据存储及数据项说明
A、实验报告表=实验报告ID+学期+课程+实验项目ID+班级+学生+实验室+填写时间+内容+结果+评语+成绩+教师ID+批阅时间+实验报告状态。
实验报告ID:整型,长度11,不允许为空。
学期:字符类型,长度11,不允许为空。
课程:字符类型,长度11,不允许为空。
实验项目ID:整型,长度11,不允许为空。
班级:字符类型,长度11,不允许为空。
学生:字符类型,长度11,不允许为空。
实验室:字符类型,长度11,不允许为空。
填写时间:字符类型,长度30,不允许为空。
内容:文本类型,允许空。
结果:文本类型,允许空。
评语:文本类型,允许空。
成绩:浮点类型,不允许为空。
教师ID:整型,可以为空。
批阅时间:字符类型,长度20,允许空。
实验报告状态:整型,长度11,不允许为空,取值0,1,2
B、学期表=学期ID+学期名称+学期状态
学期ID:整型,长度11,不允许为空,主键
学期名称:字符类型,长度50,不允许为空。
学期名称:字符类型,长度50,不允许为空。
学期状态:字符类型,长度11,不允许为空。
C、实验室表=实验室ID+实验室编号+实验室名称+实验室位置+实验室机器数量+实验室联系方式+实验室方式
实验室ID:整型,长度11,不允许为空。
实验室编号:字符型10,不允许为空,且不允许重复。
实验室位置:字符型20,允许空。
实验室机器数量:整型,11位,允许空。
实验室机器数量:整型,11位,允许空。
实验室联系方式:字符型,20位,允许空。
实验室状态:整型,11位,允许空。
D、课程表=课程ID+课程编号+课程名称+课程类型+课程学分+开设专业+开设学期
课程ID:整型11位,不允许空。
课程编号:字符型,20位,不允许空,唯一。
课程名称:字符型,20位,允许空。
课程类型:字符型,20位,允许空。
课程学分:浮点型,允许空。
开设专业:整型11位,与专业表关联。
开设学期:整型11位,与学期表关系。
E、教师表=教师ID+教师工号+教师姓名+教师职称+教师密码+教师性别+教师电话+教师院系
教师ID:整型,11位,不允许空。
教师工号:字符型,15位,不允许空,唯一。
教师姓名:字符型,20位,不允许空。
教师职称:字符型,20位,不允许空。
教师密码:字符型,50位,不允许空。
教师性别:字符型,4位,允许空。
教师电话:字符型20位,允许空。
教师院系:整型11位,不允许空,与院系表关联。
3)仪器使用记录管理
仪器使用记录管理可以细化为添加仪器使用记录、删除仪器使用记录、查询仪器使用记录、导出仪器使用记录、统计仪器使用记录5个子加工,每个子加工都需要与数据存储实验仪器使用记录表进行交互,其数据流图如图2-6所示:
数据存储及数据项说明如下:
A、班级表=班级ID+班级编号+班级名称+学生人数+所属专业
班级ID:整型11位,不允许为空。
班级编号:字符型8位,不允许空。
班级名称:字符型20位,允许空。
班级名称:字符型20位,允许空。
学生人数:整型11位,允许空。
所属专业:整型11位,与专业表关联。
B、课表=课ID+周几+上课时间+单双周+学期ID+班级ID+实验室ID+课程ID+教师ID
课ID:整型11位,不允许空。
周几:字符型15位,允许空。
上课时间:字符型15位,允许空。
单双周:字符型15位,允许空。
学期ID:整型11位,与学期表关联。
班级ID:整型11位,与班级表关联。
学期ID:整型11位,与学期表关联。
班级ID:整型11位,与班级表关联。
实验室ID:整型11位,与实验室表关联。
课程ID:整型11位,与课程表关联。
教师ID:整型11位,与教师表关联。
数据加工说明如下:
检查状态:系统接收到学生修改请求后,首先检查实验报告状态,若状态为已经批改,则拒绝修改请求;若未批改,则允许修改。
读取内容:从数据库中读取原来的实验内容。
检查:修改的信息是否符合数据要求,不符合则返回不合格的信息,合格进行提交。
提交:将修改后的信息提交到数据库,保存到实验报告表。
5)对图进行检查和合理布局,主要检查分解是否恰当、彻底,DFD中各层是否有遗漏、重复、冲突之外,各层DFD及同层DFD之间之间关系是否正确及命名、编号是否确切、合理等,对错误及不当之处进行修改。
修改后和用户进行交流,在用户完全理解数据图的内容的基础上征求用户的意见。
4.2.2、建立数据模型
(1)找出所有实体,确定实体属性。
实验教学管理系统的主要实体及其属性如下。
管理员:管理员帐号、管理员密码、管理员名字、管理员联系电话。
院系:院系编号、院系名称、院系联系电话、院系地址。
专业:专业编号、专业名称、所属院系。
班级:班级编号、班级名称、班级人数、所属专业。
学生:学生学号、学生姓名、学生性别、学生密码、所属班级。
教师:教师工号、教师姓名、教师性别、教师密码、教师职称、教师电话、所属院系。
实验室:实验室编号、实验室名称、实验室位置、实验室机器数量、实验室联系方式、开放状态。
实验项目:项目名称、项目类型、项目目的、项目环境、项目状态、开设课程、教师ID、开设学期。
学期:学期名称。
实验仪器使用记录:仪器使用记录日期、工作内容、运行启动时间、运行终止时间、使用附件、设备编号、机器IP、实际使用时数、使用人、教师签名、备注、实验室、学期。
实验室使用记录:实验室使用记录日期、工作内容、实验时间、实验人数、仪器使用情况、设备编号、机器IP、教师签名、实验班级、实验室、学期。
实验报告:学期、课程、项目、班级、学生、实验室、填写实验报告时间、实验内容、实验结果、教师评论、实验内容、实验结果、教师评论、实验报告成绩、教师ID。
课表:学期、班级、实验室、课程、教师、周、上课时间、单双周制。
留言:交流标题、交流内容、交流状态、教师回复、学生、教师。
(2)确定实体间的联系,画出实体联系图(E-R图)。
一个院系可以拥有多个专业,一个专业属于一个院系,关系是一对多。
一个专业可以拥有多个班级,一个班级属于一个专业,关系是一对多。
一个班级可以拥有多个学生,一个学生属于一个班级,关系是一对多。
一个院系可以拥有多个教师,一个教师属于一个院系,关系是一对多。
一个教师可以教授多门课程,一门课程可以被一个或多个教师所教授,授课与教师的关系是多对一,且授课与课程的关系也是多对一,以授课表为连接,实现教师与课程的关系是多对多。
一个课程可以有多个实验项目,一个实验项目属于一个课程,关系是一对多。
一个实验项目可以有多个实验报告,一个实验报告属于一个实验项目,关系是一对多。
一个院系可以有多一个实验室可以有多个实验室使用记录,一个实验室使用记录属于一个实验室,关系是一对多。个实验室,一个实验室属于一个院系,关系是一对多。
一个教师可以写多个留言,一个留言属于一个教师,关系是一对多。
实体及其联系如图2-8所示: