4.2 需求分析
简单地说,需求分析就是分析用户的需求。需求分析是设计数据库的起点,这一阶段收集到的基础数据和数据流图是下一步概念结构设计的基础。如果该阶段的分析有误,将直接影响到后面各个阶段的设计,并影响最终设计结果是否合理和实用。
4.2.1 需求描述与分析
目前数据库应用越来越普及,而且结构越来越复杂,为了支持所有用户的运行,数据库设计变得异常复杂。如果没有对信息进行全面、充分的分析,则设计很难完成。因此,需求分析放在整个设计的第一步。
需求分析阶段的目标是通过详细调查现实世界要处理的对象(组织、部门、企业等),充分了解原系统(手工系统或计算机系统)的工作概况,确定企业的组织目标,明确用户的各种需求,进而确定新系统的功能,并把这些需求写成用户和数据库设计者都能够接受的文档。
需求分析阶段必须强调用户的参与。在新系统设计时,要充分考虑系统在今后可能出现的扩充和改变,使设计更符合未来发展的趋势,并易于改动,以减少系统维护的代价。
4.2.2 需求分析分类
需求分析总体上分为两类:信息需求和处理需求,如图4-3所示。
图4-3 需求分析的描述
1.信息需求
信息需求定义了未来系统用到的所有信息,描述了数据之间本质上和概念上的联系,描述了实体、属性、组合及联系的性质。由信息需求可以导出数据需求,即在数据库中需要存储哪些数据。
2.处理需求
处理需求中定义了未来系统的数据处理操作,描述了操作的先后次序、操作执行的频率和场合、操作与数据之间的联系等。如对处理响应时间有什么要求,处理方式是批处理还是联机处理。
在信息需求和处理需求定义说明的同时,还应定义安全性与完整性要求。安全性要求描述系统中不同用户对数据库的使用和操作情况。完整性要求描述数据之间的关联关系及数据的取值范围。
需求分析是整个数据库设计中最重要的一步,如果把整个数据库设计看作是一个系统工程,那么,需求分析是这个系统工程的最原始输入信息。但是确定用户的最终需求是一件困难的事,其困难不在于技术上,而在于要了解、分析、表达客观世界并非易事。一方面用户缺少计算机知识,开始时无法确定计算机究竟能为自己做什么,不能做什么,因此往往不能准确地表达自己的需求,所提出的需求往往不断变化:另一方面,设计人员缺少用户的专业知识,不易理解用户的真正需求,甚至误解用户的需求。因此设计人员必须不断深入地与用户交流,才能逐步确定用户的实际需求。
这一阶段的输出是“需求分析说明书”,其主要内容是系统的数据流图和数据字典。需求说明书应是一份既切合实际,又具有远见的文档,是一个描述新系统的轮廓图。
4.2.3 需求分析的内容、方法和步骤
进行需求分析首先是调查清楚用户的实际要求,与用户达成共识,然后分析与表达这些需求。
调查用户需求的重点是“数据”和“处理”,为了达到这一目的,在调查前要拟定调查提纲。调查时要抓住两个“流”,即“信息流”和“数据流”,而且调查中要不断地将这两个“流”结合起来。调查的任务是调研现行系统的业务活动规则,并提取描述系统业务的现实系统模型。
1.需求分析的内容
在通常情况下,调查用户的需求包括三方面的内容,即系统的业务现状、信息源及外部要求。
(1)业务现状
业务现状包括业务的方针政策、系统的组织结构、业务的内容和业务的流程等,为分析信息流程做准备。
(2)信息源
信息源包括各种数据的种类、类型和数据量,各种数据的产生、修改等信息。
(3)外部要求
外部要求包括信息要求、处理要求、安全性与完整性要求等。
2.需求分析的方法
在调查过程中,可以根据不同的问题和条件,使用不同的调查方法。常用的调查方法如下。
1)跟班作业。通过亲身参加业务工作来观察和了解业务活动的情况。为了确保有效,要尽可能多地了解要观察的人和活动,例如,低谷、正常和高峰期等情况如何。
2)开调查会。通过与用户座谈来了解业务活动的情况及用户需求。采用这种方法,需要有良好的沟通能力,为了保证成功,必须选择合适的人选,准备的问题涉及的范围要广。
3)检查文档。通过检查与当前系统有关的文档、表格、报告和文件等,进一步理解原系统,并可以发现与原系统问题相关的业务信息。
4)问卷调查。问卷是一种有着特定目的的小册子,这样可以在控制答案的同时,集中一大群人的意见。问卷有两种格式:自由格式和固定格式。自由格式问卷上,答卷人提供的答案有更大的自由。问题提出后,答卷人在题目后的空白处写答案。在固定格式问卷上,包含的问题答案是特定的,给定一个问题,答题者必须从所提供的答案中选择一个,因此,容易列成表格,但另一方面,答卷人不能提供一些有用的附加信息。
做需求分析时,往往需要同时采用上述多种方法。但无论使用何种调查方法,都必须有用户的积极参与和配合。
3.需求分析的步骤
需求分析的步骤如下。
(1)分析用户活动,生成用户活动图
这一步要了解用户当前的业务活动和职能,分析其处理过程。如果一个业务流程比较复杂,要把它分解为几个子处理,使每个处理功能明确、界面清楚,分析之后画出用户活动图(即用户的业务流程图)。
(2)确定系统范围,生成系统范围图
这一步是确定系统的边界。在和用户经过充分讨论的基础上,确定计算机所能进行的数据处理的范围,确定哪些工作由人工完成,哪些工作由计算机系统完成,即确定人机界面。
(3)分析用户活动所涉及的数据,生成数据流图
在这一过程中,要深入分析用户的业务处理过程,以数据流图的形式表示出数据的流向和对数据所做的加工。
数据流图(Data Flow Diagram,DFD)是从“数据”和“处理”两个方面表达数据处理的一种图形化表示方法,直观、易于被用户理解。
数据流图有4个基本成分:数据流(用箭头表示)、加工或处理(用圆圈表示)、文件(用双线段表示)和外部实体(数据流的源点和终点用方框表示)。图4-4是一个简单的DFD。
图4-4 一个简单的DFD
在众多分析和表达用户需求的方法中,自顶向下、逐步细化是一种简单实用的方法。为了将系统的复杂度降低到人们可以掌握的程度,通常把大问题分割成若干小问题,然后分别解决,这就是“分解”。分解也可以分层进行,即先考虑问题最本质的属性,暂时把细节略去,以后再逐层添加细节,直到涉及最详细的内容,这称为“抽象”。
DFD可作为自顶向下、逐步细化时描述对象的工具。顶层的每一个圆圈都可以进一步细化为第二层,第二层的每一个圆圈都可以进一步细化为第三层,……。直到最底层的每一个圆圈已表示一个最基本的处理动作为止。DFD可以形象地表示数据流与各业务活动的关系,它是需求分析的工具和分析结果的描述工具。
图4-5给出了某校学生课程管理子系统的数据流图。该子系统要处理的是学生根据开设课程提出选课请求(即选课单)送教务处审批,对已批准的选课单进行上课安排。教师对学生的上课情况进行考核,给予平时成绩和允许参加考试资格,对允许参加考试的学生根据考试情况给予考试成绩和总评成绩。
图4-5 学生课程管理子系统的数据流图
(4)分析系统数据,生成数据字典
仅有DFD并不能构成需求说明书,因为DFD只表示出系统由哪几部分组成和各部分之间的关系,并没有说明各个成分的含义。只有对每个成分都给出确切定义后,才能较完整地描述系统。
(5)撰写需求说明书
需求说明书是在需求分析活动后建立的文档资料,它是对开发项目需求分析的全面描述。需求说明书的内容有需求分析的目标和任务、具体需求说明、系统功能和性能、系统运行环境等,还应包括在分析过程中得到的数据流图、数据字典、功能结构图等必要的图表说明。
需求说明书是需求分析阶段成果的具体表现,是用户和开发人员对开发系统的需求取得认同基础上的文字说明,它是以后各个设计阶段的主要依据。
4.2.4 数据字典
数据流图表达了数据和处理的关系,数据字典则是系统中各类数据描述的集合,它的功能是存储和检索各种数据描述,并为DBA提供有关的报告。对数据库设计来说,数据字典是进行详细的数据收集和数据分析所获得的主要成果,因此在数据库中占有很重要的地位。数据字典通常包括数据项、数据结构、数据流、数据存储和处理过程5个部分。其中数据项是不可再分的数据单位,若干数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流、数据存储的逻辑内容。
1.数据项
数据项是数据的最小单位,是不可再分的数据单位。通常包括以下内容:
数据项描述={数据项名,数据项含义说明,别名,数据类型,长度,取值范围,取值含义,与其他数据项的逻辑关系,数据项之间的联系}
其中,“取值范围”“与其他数据项的逻辑关系”定义了数据的完整性约束条件,是设计数据校验功能的依据。
可以用关系规范化理论为指导,用数据依赖的概念分析和表示数据项之间的联系。即按实际语义,写出每个数据项之间的数据依赖,它们是数据库逻辑结构设计阶段数据模型优化的依据。
在学生课程管理子系统中,有一个数据流选课单,每张选课单有一个数据项为选课单号,在数据字典中可对此数据项做如图4-6所示的描述。
图4-6 选课号数据项
2.数据结构
数据结构反映了数据之间的组合关系。一个数据结构可以由若干数据项组成,也可以由若干个数据结构组成,或由若干数据项和数据结构混合组成。对数据结构的描述通常包括以下内容:
数据结构描述={数据结构名,含义说明,组成:{数据项或数据结构}}
3.数据流
数据流可以是数据项,也可以是数据结构,表示某一加工处理过程的输入或输出数据。对数据流的描述通常包括以下内容:
数据流描述={数据流名,说明,数据流来源,数据流去向,组成:{数据结构},平均流量,高峰期流量}
其中,“数据流来源”是说明该数据流来自哪个过程:“数据流去向”是说明该数据流到哪个过程去:“平均流量”是指在单位时间(每天、每周、每月等)里的传输次数;“高峰期流量”是指在高峰时期的数据流量。
4.数据存储
数据存储是处理过程中要存储的数据,可以是手工文档或手工凭单,也可以是计算机文档。对数据存储的描述通常包括以下内容:
数据存储描述={数据存储名,说明,编号,输入的数据流,输出的数据流}组成:{数据结构},数据量,存取频度,存取方式}
其中,“存取频度”指每小时或每天或每周存取几次,每次存取多少数据等信息:“存取方式”是指批处理还是联机处理,是检索还是更新,是顺序检索还是随机检索等;“输入的数据流”是指其来源;“输出的数据流”是指其去向。
5.处理过程
处理过程的具体处理逻辑一般用判定表或判定树来描述。数据字典中只需要描述处理过程的说明性信息。通常包括以下内容:
处理过程描述={处理过程名,说明,输入:{数据流},输出:{数据流},处理:{简要说明}}
其中,“简要说明”主要说明该处理过程的功能及处理要求。功能是指该处理过程用来做什么,处理要求包括处理频度要求,如单位时间内处理多少事务、多少数据量、响应时间要求等。这些处理要求是后面物理设计的输入及性能评价的标准。
数据字典是关于数据库中数据的描述,即元数据,而不是数据本身。数据字典是在需求分析阶段建立的,在数据库设计过程中不断修改、充实和完善的。