九. 数据流图
数据流图是下午场考试中第一个题目,分值 15 分。通常会考察实体名、存储名、加工名的补充,以及找到缺失的数据流并改正等。
1. 数据平衡原则
数据流的分析依赖于数据平衡原则。
父图与子图之间的平衡
父图与子图之间平衡是指任何一张 DFD 子图边界上的输入/输出数据流必须与其父图对应加工的输入/输出数据保持一致。如果父图中某个加工的一条数据流对应于子图中的几条数据流,而子图中组成这些数据流的数据项全体正好等于父图中的这条数据流,那么它们仍然是平衡的。也就是可能存在一对一或一对多的类似关系。
子图内平衡
数据流图常见的 3 种错误:
- 加工只有输入没有输出,称为黑洞。
- 加工只有输出没有输入,称为奇迹。
- 加工中输入不足以产生输出,称为灰洞。
找到缺失的数据流
如父图:
子图:
先找到对应实体,然后再找对应数据流。如前端应用,子图中缺少处理后的操作结果数据流;后端数据库缺少操作结果数据流。
2. 解题技巧
详细分析试题说明
数据管理员可通过中间件进行用户管理、操作管理和权限管理。用户管理维护用户信息,用户信息(用户名、密码)存储再在用户表中;操作管理维护数据实体的标准操作及其所属的后端数据库信息,标准操作和后端数据库信息存放在操作表中;权限管理维护权限表,该表存储用户可执行的操作信息。
- 数据管理员是一个外部实体;
- 中间件有用户管理、操作管理、权限管理这些加工;
- 中间件有用户表这个数据存储,且该存储与用户管理相关;
- 后台数据库是一个外部实体;
- 中间件有操作表这个数据存储,且该存储与操作管理相关;
- 中间件有权限表这个数据存储,且该存储与权限管理相关。
利用数据平衡原则
找到父图与子图对应外部实体缺失的数据流。
补充实体
实体可能是:
- 人物角色:如 客户、管理员、主管、经理、老师、学生等。
- 组织机构:如 银行、供应商、募捐机构等。
- 外部系统:如 银行系统、工资系统、后台数据库(当要开发的是中间件时)等。
补充存储
存储的文字方面特征:**文件,**表,**库,**清单,**档案 等。
补充加工
加工是用于处理数据流的,所以要补充加工名,可以把该加工涉及到的数据流,在说明中标识出来,再在数据流名称所在的句子中,找 "动词 + 名词" 的结构,分析是否可作为加工。有时也是 "名词 + 动词" 。
"动词 + 名词" 如:生成报告、发出通知、批改作业、记录分数、物流跟踪、用户管理等。
补充数据流
① 数据平衡原则
- 顶层图与 0 层图对比,是否有顶层图有,但 0 层图无的数据流,或反之。
- 检查图中每个加工,是否存在只有输入没有输出或只有输出没有输入,或根据输入无法产生对应输出的情况。
② 按题目说明与图进行匹配
说明中的每一句话,都能与图中有对应关系,当把说明中的实体与数据流标识出来之后,容易缩小对应范围,找出纰漏。
3. 例题
(1)例题 1
说明:
现准备为某银行开发一个信用卡管理系统 CCMS,该系统的基本功能为:
- 信用卡申请。非信用卡客户填写信用卡申请表,说明所要申请的信用卡类型及申请者的基本信息,提交 CCMS。如果信用卡申请被银行接受,CCMS 将记录该客户的基本信息,并发送确认函给该客户,告知客户信用卡的有效期及信贷限额;否则该客户将会收到一封拒绝函。非信用卡客户收到确认函后成为信用卡客户。
- 信用卡激活。信用卡客户向 CCMS 提交激活请求,用信用卡号和密码激活该信用卡。激活操作结束后,CCMS 将激活通知发送给客户,告知客户其信用卡是否被成功激活。
- 。信用卡客户的个人信息可以在 CCMS 中进行在线管理。每位信用卡客户可以在线查询和修改个人信息。
- 交易信息查询。信用卡客户使用信用卡进行的每一笔交易都会记录在 CCMS 中。信用卡客户可以通过 CCMS 查询并核实其交易信息(包括信用卡交易记录及交易额)。
下面分别给出了该系统的顶层数据流图和 0 层数据流图的初稿。
问题1:
根据说明,将顶层数据流图中的 E1~E3 补充完整。
问题2:
顶层数据流图缺少三条数据流,根据说明,分别指出这三条数据流的起点和终点。(注:数据流的起点和终点均采用图中的符合和描述)
问题3:
0 层数据流图中有两条数据流是错误的,请指出这两条数据流的名称,并改正。
问题4:
根据说明,将 0 层数据流图中 P1~P4 的处理名称补充完整。
解析1:
首先分析题干,通常题干中每段以总分形式呈现的,最前面的描述往往就是加工。如信用卡申请、信号卡激活等。
E1~E3 分别代表三个实体,E1 接收到两个函,说明是非信用卡客户;E2 有查询修改个人信息的请求,也接收到激活通知,说明是信用卡客户;E3 接收到信用卡申请并返回验证结果,说明是银行。
E1:非信用卡客户 E2:信用卡客户 E3:银行
解析2:
顶层数据流图缺少三条数据流,继续分析题干。
首先看到非信用卡客户实体,填写信用卡申请表提交给 CCMS,此处缺失。即 E1(非信用卡客户)->(填写信用卡申请表) P0(CCMS)。然后是信用卡客户实体,向 CCMS 提交激活请求,操作结束后会收到来自 CCMS 的激活通知,此处缺失了提交激活请求,即 E2(信用卡客户)->(激活请求)P0(CCMS)。最后是信用卡客户提交了交易记录查询请求,CCMS 应该返回交易记录查询结果,此处缺失,即 P0(CCMS)->(交易信息)E2(信用卡客户)。
① 起点:E1(非信用卡客户) 终点:P0(CCMS) 数据流名称:填写信用卡申请表
② 起点:E2(信用卡客户) 终点:P0(CCMS) 数据流名称:激活请求
③ 起点:P0(CCMS) 终点:E2(信用卡客户) 数据流名称:交易信息
解析3:
0 层数据流图有两条错误的数据流,继续分析题干。
其实根据题干描述,可以先把 P0~P4 补充完整,也方便做题。
E2 是信用卡客户,提交了交易查询记录请求给 P1,因此 P1 应该是交易信息查询。也提交了查询/修改个人信息请求给 P2,因此 P2 应该是信用卡客户信息管理。P3 将激活通知发送给 E2,所以 P3 应该是信用卡激活,最后 P4 与 E1(非信用卡客户)交互,即 P4 是信用卡申请。
P1:交易信息查询 P2:信用卡客户信息管理 P3:信用卡激活 P4:信用卡申请
第一个错误的是 P4 ->(填写信用卡申请表) E1。应该是 E1(非信用卡客户)->(填写信用卡申请表) P0(CCMS),是非信用卡客户提交申请表给 CCMS,此处方向反了。
第二个错误的是 P4 -> (激活请求)P3。应该是 E2(信用卡客户)->(激活请求)P0(CCMS),是信用卡客户提交激活请求给 CCMS,即进行信用卡激活。
① 起点:P4(信用卡申请) 终点:E1(非信用卡客户) 数据流名称:填写信用卡申请表
改正后:起点:E1(非信用卡客户) 终点:P4(信用卡申请) 数据流名称:填写信用卡申请表
② 起点:P4(信用卡申请) 终点:P3(信用卡激活 ) 数据流名称:激活请求
改正后:E2(信用卡客户) 终点:P3(信用卡激活 ) 数据流名称:激活请求
解析4:
如解析3所述。
P1:交易信息查询 P2:信用卡客户信息管理 P3:信用卡激活 P4:信用卡申请
(2)例题 2
说明:
某证券交易所为了方便提供证券交易服务,欲开发一证券交易平台,该平台的主要功能如下:
- 开户。根据客户服务助理提交的开户信息,进行开户,并将客户信息存入客户记录中,账户信息(余额等)存入账户记录中。
- 存款。客户可以向其账户中存款,根据存款金额修改账户余额。
- 取款。客户可以从其账户中取款,根据取款金额修改账户余额。
- 证券交易。客户和经纪人均可以进行证券交易(客户通过在线方式,经纪人通过电话),将交易信息存入交易记录中。
- 检查交易。平台从交易记录中读取交易信息,将交易明细返回给客户。
设计得到的数据流图如下所示:
问题1:
使用说明中的词语,给出上下文数据流图中的实体 E1~E3 的名称。
问题2:
使用说明中的词语,给出 0 层数据流图中数据存储 D1~D3 的名称。
问题3:
根据说明和图中的术语,补充 0 层数据流图中缺失的数据流及其起点和终点。
问题4:
实际的证券交易通常是在证券交易中心完成的,因此,该平台的证券交易功能需将交易信息传递给证券交易中心。针对这个功能需求,需要对两个数据流图进行哪些修改,请用 200 字以内的文字加以说明。
解析1:
分析题干可以得到信息,客户服务助理提交的开户信息,因此 E1 是客户服务助理;客户可以向其账户中存款,也可以取款,因此 E2 是客户;经纪人通过电话进行证券交易,所以 E3 是经纪人。
E1:客户服务助理 E2:客户 E3:经纪人
解析2:
客户信息存入客户记录中,账户信息(余额等)存入账户记录中,因此 D1 是客户记录,D2 是账户记录。平台从交易记录中读取交易信息,将交易明细返回给客户,D3 是交易记录。
D1:客户记录 D2:账户记录 D3:交易记录
解析3:
补充缺失的数据流时可以利用数据平衡原则,一个加工不能只有输入或输出。
根据题干,账户信息(余额等)存入账户记录中,并且根据存款或取款金额修改账户余额,因此存款和取款加工指向 D2,数据流名称为修改账户余额。交易信息存入交易记录中,因此证券交易(在线)和证券交易(电话)都需要指向 D3,数据流名称为交易信息存入交易记录。通常补充缺失数据流的题目需要用表格形式回答,如下:
起点 | 终点 | 数据流名称 |
存款 | D2(账户记录) | 修改账户余额 |
取款 | D2(账户记录) | 修改账户余额 |
证券交易(在线) | D3(交易记录) | 交易信息存入交易记录(在线) |
证券交易(电话) | D3(交易记录) | 交易信息存入交易记录(电话) |
解析4:
根据题目要求,增加了新的外部实体证券交易中心。在上下文数据流图中,增加证券交易平台指向证券交易中心的数据流,名称为交易信息。在 0 层数据流图中,分别增加证券交易(在线)和证券交易(电话)指向证券交易中心的数据流,名称均为交易信息。
起点 | 终点 | 数据流名称 |
证券交易平台 | 证券交易中心 | 交易信息 |
证券交易(在线) | 证券交易中心 | 交易信息 |
证券交易(电话) | 证券交易中心 | 交易信息 |
(3)例题 3
说明:
某医疗护理机构为老年人或有护理需求者提供专业护理,现欲开发一基于Web的医疗管理系统,以改善医疗护理效率。该系统的主要功能如下:
- 通用信息查询。客户提交通用信息查询请求,查询通用信息表,返回查询结果。
- 医生聘用。医生提出应聘/辞职申请,交由主管进行聘用/解聘审批,更新医生表,并给医生反馈聘用/解聘结果;删除解聘医生的出诊安排。
- 预约处理。医生安排出诊时间,存入医生出诊时间表;根据客户提交的预约查询请求,查询在职医生及其出诊时间等预约所需数据并返回;创建预约,提交预约请求,在预约表中新增预约记录,更新所约医生出诊时间并给医生发送预约通知;给客户反馈预约结果。
- 药品管理。医生提交处方,根据药品名称从药品数据中查询相关药品库存信息,开出药品,更新对应药品的库存以及预约表中的治疗信息;给医生发送药品已开出反馈。
- 报表创建。根据主管提交的报表查询请求(报表类型和时间段),从预约数据、通用信息、药品库存数据、医生以及医生出诊时间中进行查询,生成报表返回给主管。
设计得到的数据流图如下所示:
问题1:
使用说明中的词语,给出上下文数据流图中的实体 E1~E3 的名称。
问题2:
使用说明中的词语,给出 0 层数据流图中数据存储 D1~D5 的名称。
问题3:
根据说明和图中的术语,补充 0 层数据流图中缺失的数据流及其起点和终点。
问题4:
使用说明中的词语,说明预约处理可以分解为哪些子加工,并说明两个数据流图是如何保持平衡的。
解析1:
根据题干得到信息,客户提交通用信息查询请求,因此 E1 是客户;医生提出应聘/辞职申请,交由主管进行聘用/解聘审批,所以 E2 是医生,E3 是主管。
E1:客户 E2:医生 E3:主管
解析2:
继续分析题干,客户提交通用信息查询请求,查询通用信息表,因此 D1 是通用信息表;更新医生表,D3 是医生表;医生安排出诊时间,存入医生出诊时间表,D4 是出诊时间表;在预约表中新增预约记录,D2 是预约表;根据药品名称从药品数据中查询相关药品库存信息,D5 是药品数据。
D1:通用信息表 D2:预约表 D3:医生表 D4:出诊时间表 D5:药品库存表
解析3:
删除解聘医生的出诊安排,此处缺失,应该由 P2 指向 D4,名称为删除解聘医生的出诊安排;更新所约医生出诊时间部分缺失,应该由 P3 指向 D4,名称为更新出诊时间;根据药品名称从药品数据中查询相关药品库存信息,开出药品,此处缺失,应该由 D5 指向 P4,名称为药品库存信息;更新对应药品的库存以及预约表中的治疗信息,更新预约表的治疗信息缺失,应该由 P4 指向 D2。
起点 | 终点 | 数据流名称 |
P2 医生聘用 | D4 出诊时间表 | 删除解聘医生出诊安排 |
P3 预约处理 | D4 出诊时间表 | 更新出诊时间 |
D5 药品数据 | P4 药品管理 | 药品库存信息 |
P4 药品管理 | D2 预约表 | 更新预约表的治疗信息 |
解析4:
预约处理的分解可以根据题干中对预约处理的描述,每个分号前代表一个加工,即安排出诊时间、预约查询、创建预约、反馈预约结果。
两个数据流图保持平衡即父图与子图之间的平衡,父图中某个加工的输入输出数据流必须与其子图的输入输出数据流在数量上和名字上相同。父图的一个输入或输出对应子图中的几个输入或输出,而子图中组成的这些数据流的数据项全体正好是父图中的这一个数据流。
数据流图部分的内容至此结束,后续如果有补充或修改会直接添加。