ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

数据流图入门指南:四符号与银行取款实例

数据流图入门指南:四符号与银行取款实例

简介:这份PPT面向系统分析与设计初学者、信息管理相关专业学生及需要与技术人员沟通业务逻辑的非技术用户,围绕数据流图(DFD)的绘制方法展开,帮助读者理解如何用图形化方式描述信息在系统中的流动与处理过程。内容涵盖数据流、加工、数据存储、外部项四类基本元素的含义与编号规则,并给出从识别外部项、确定输入输出数据流,到自顶向下逐层分解、检查完善的完整绘制步骤,配合银行取款处理等实例演示关联图与分层图的画法。资源包共1个PPT文件,约312KB,篇幅精炼,适合课堂讲解或自学查阅。目前已有626人学习下载,读者可借此掌握DFD的规范符号与分解原则,为系统分析报告和课程设计打下基础。

1. 画数据流图入门:一张图看懂系统里数据怎么跑

你有没有遇到过这种场面:开会时有人问“这个功能的数据从哪来、到哪去”,大家七嘴八舌,越说越乱,最后谁也没说明白。数据流图(DFD,Data Flow Diagram)就是专门治这个毛病的工具——它用四个简单符号,把系统里数据从哪来、经过什么处理、存到哪里、最后给谁,画成一张谁都能看懂的图。它不聊服务器型号、不聊数据库表结构,只聊“信息怎么流动”。所以哪怕你完全不懂编程,也能上手画。这篇入门指南就是带零基础的你,从认识四个符号开始,一步步画出第一张能拿给别人看的数据流图。

2. 先搞懂四个符号:数据流图到底由什么组成

数据流图之所以让人觉得“好像不难”,是因为它翻来覆去只用四种符号。你把这四个角色认全了,后面画图就是搭积木。我第一次学的时候,导师只说了一句话:“你就当在画一条河,水是数据,河上的闸门是加工,水库是存储,从外面往河里倒水的人就是外部项。”这句话我记到现在。

2.1 外部项:系统的“门口”,数据从这进也从这出

外部项也叫源点或终点,代表系统之外、但跟系统有信息往来的实体。它可以是一个人(比如储户)、另一个系统(比如出版社的订单系统),甚至一台设备。在图上通常画成一个小矩形,编号习惯用 S 开头,比如 S1 储户、S2 会计。

新手最容易犯的迷糊是:把系统内部的人也算成外部项。判断标准很简单——这个人或这个东西,是不是你这次要画的系统“管不着”的?管不着、但又要跟系统交换数据的,才是外部项。比如画银行取款系统,储户在系统外面填单子、拿现金,所以他是外部项;而银行柜员如果只是系统的一个操作角色,就不该单独画成外部项,除非他代表另一个独立系统。

外部项不需要在图上展开细节。你不需要画储户长什么样、怎么填单,只要标清楚“他给系统什么数据、从系统拿走什么数据”就够了。这一点特别重要,因为很多新手一上来就想把外部项画得很细,结果图越画越大,重点反而丢了。

2.2 加工:数据在这里被“处理”了一下

加工,有的教材叫处理或变换,表示对数据流做操作。符号是一个圆角矩形或者圆圈,里面分上下两部分:上面写编号(P 开头,比如 P1、P2),下面写加工名(比如“账务处理”“打印账簿”)。

加工名要简单、能概括,别写成一句话。比如“审核并查对账目,将不合格的存折退回”这种描述,加工名写“取款审核”就够了,详细规则放到数据词典里说。编号必须唯一,因为后面分层画图时,你要靠编号追踪“这个加工在下一层被拆成了哪几个小加工”。

加工还有一个关键特性:它可以逐层分解。顶层图里一个“取款处理”,到第二层可能拆成“取款审核”和“取款处理”两个加工。这不是重复画,而是把一个大动作拆细,让看图的人能一层层往下追。入门阶段你只要记住:先画粗的,再拆细的,别一上来就画最细的。

2.3 数据存储:数据中途“歇脚”的地方

数据存储就是系统里存数据的地方,画成开口的长方条,左边一个小方格写编号(D 开头,比如 D1 账目库),右边写存储名。它可以是数据库、文件、台账,甚至一张手工登记表——数据流图不关心你用什么技术存,只关心“这里有一批数据待着,有数据流进也有数据流出”。

有一条硬规矩:数据存储上一定要有数据流。也就是说,不能画一个孤零零的存储框,既没人往里写、也没人从里读。新手常犯的错是画了一堆存储框当“装饰”,结果每个框都悬空。你画的时候可以自查:这个存储,谁往里写?谁从里读?两个问题答不上来,就删掉或者补数据流。

另外,同一个数据存储可以在图上出现多次,用带斜线的小方框表示“重复”。这是为了避免连线交叉,不是表示有多个存储。入门阶段图不大,先尽量画一次,实在绕不开再用重复符号。

2.4 数据流:箭头一画,关系就清楚了

数据流是带箭头的线,箭头旁边写数据流名,比如“付款单”“明细账”“合格存折、取款单”。它表示一个或一组确定的数据在流动。名字要直观,别写“数据1”“信息A”这种糊弄人的名字。

这里有个容易被忽略的点:两个符号之间可以有多个数据流,而且数据流图不表示它们之间的先后次序或主次关系。也就是说,图上画了两条箭头,不代表谁先谁后,只代表“这两股数据都存在”。所以别在图上标“第一步”“第二步”,那是流程图干的事,不是数据流图。

还有一条原则:数据流必须经过加工。也就是说,不能从外部项直接连到数据存储,也不能从数据存储直接连到外部项,中间必须有一个加工在“动手”。这条规矩后面讲避坑时还会细说,因为它是新手翻车最多的地方。

3. 为什么值得学:数据流图是跟“不懂技术的人”说清楚事的工具

很多人第一次听到数据流图,反应是“这不就是画箭头吗,有什么好学的”。我当初也这么想,直到有一次要给一个完全不懂技术的同事解释一个订单系统,我讲了十分钟表结构,对方眼神越来越空。后来我拿纸画了四个框、几条箭头,标上“顾客”“订单检查”“合格订单”“出版社”,对方两分钟就点头了。那一刻我才明白,数据流图的价值不在图本身,在于它强迫你把“系统在做什么”和“系统怎么做”分开。

3.1 它只谈逻辑,不谈技术,所以谁都能看懂

数据流图有一个很硬气的设定:不涉及硬件、软件、数据结构与文件组织。它跟系统的物理描述无关,只表示系统的逻辑功能——这个系统在信息处理方面要做什么。这句话听起来像教材,翻译成大白话就是:你画图的时候不用管服务器几台、数据库用哪个、接口怎么调,只管“数据从哪来、经过什么处理、存到哪、给谁”。

这个设定带来的好处是,业务人员能直接参与。你画一张图,拿去给用这个系统的人看,他能指着某个加工说“不对,我们这里还要核对一下额度”,你当场就能改。如果你拿一张数据库表结构图给他看,他只能沉默。数据流图是系统分析人员和用户之间交流的有效手段,这句话不是客套,是实战经验。

3.2 它是后面设计的“底稿”,画清楚了后面少返工

数据流图画的是逻辑模型,而系统设计要建的是物理模型。逻辑模型没画清楚,物理模型就是空中楼阁。你想想,如果连“取款要经过审核和账务处理两步”都没说明白,后面讨论“审核用哪个服务、账务写哪张表”就是瞎聊。

入门阶段你不需要想那么远,但要知道:数据流图不是画着玩的,它是后面所有设计工作的依据之一。画的时候多花十分钟把数据流名字写清楚、把加工边界划明白,后面能省掉好几轮“这个数据到底从哪来的”的扯皮。血泪经验是:图上的每一个箭头,最后都会变成某个人要写的代码或要配的接口,你糊弄它,它就糊弄你。

3.3 入门门槛低,但能练出“结构化思维”

数据流图对零基础的人特别友好,因为它的符号少、规则少,你不需要先学编程、先学数据库。但它又不是纯画画,它逼你做三件事:第一,分清系统边界,哪些是外部项、哪些是内部加工;第二,分清数据和处理,数据是“流”,加工是“动”;第三,学会自顶向下,先画粗再画细。

这三件事练熟了,你再看任何系统,脑子里会自动分层:这是输入、这是处理、这是存储、这是输出。这种结构化思维,不管你以后做产品、做测试、做实施,都用得上。所以我的建议是:别把它当成一门“画图课”,当成一次思维训练。

4. 第一个例子怎么跑:从零画一张银行取款数据流图

光看符号不动手,等于没学。这一章我们拿一个最小例子走一遍完整流程:储户填取款单和存折交给银行,银行审核查账,不合格的退回,合格的做取款处理、修改账目,最后把存折、利息单、结算清单和现金交给储户,取款单存档。你跟着下面五步走,就能画出第一张图。

4.1 第一步:定外部项,先把“门口”找出来

先问自己:这个系统跟谁交换数据?储户把取款单和存折交给系统,系统把存折、利息单、结算清单和现金还给储户。所以储户是外部项,编号 S,画在图的左边或右边都行。

这一步的要点是:只画跟系统有直接数据往来的人或系统。银行内部的操作员如果只是使用系统,不单独作为外部项。你可以在纸上先写一行字:“外部项:储户”。别急着画框,先把名单列清楚。

4.2 第二步:画关联图,把整个系统当成一个加工

关联图是最顶层的一张图,整个系统只画成一个加工,外面围着外部项,中间用数据流连起来。这一步的目的是定边界:系统到底接收什么、输出什么。

S1 储户 --F1 取款单、存折--> P 取款系统 --F2 存折、利息单、结算清单--> S1 储户

上面这行示意里,F1 是输入数据流,F2 是输出数据流,P 是加工(取款系统)。注意现金是实物,不能作为数据流画进去,这一点教材里专门提醒过。你画的时候,数据流名字要写具体,“取款单、存折”比“单据”清楚得多。

关联图画完,先别往下拆,拿给旁边的人看一眼,问他:“你觉得这个系统收什么、给什么?”如果他能照着图说出来,说明边界定住了。

4.3 第三步:拆第一层,把大加工分成两个小加工

现在把 P 取款系统拆开。根据业务描述,取款要经过“审核查账”和“取款处理”两个动作,所以第一层画两个加工:P1 取款审核、P2 取款处理。

S1 储户 --F1 取款单、存折--> P1 取款审核 P1 取款审核 --F1.1 合格存折、取款单--> P2 取款处理 P1 取款审核 --F1.2 不合格存折、取款单--> S1 储户 P2 取款处理 --F2 存折、利息单、结算清单--> S1 储户 P2 取款处理 --F3 取款记录--> D2 取款记录 P2 取款处理 <--F4 账目数据--> D1 账目库

这段示意里出现了两个数据存储:D1 账目库和 D2 取款记录。P2 要从 D1 读账目、改账目,还要把取款记录写进 D2。注意每条数据流都经过加工,没有从外部项直连存储的线。

你画的时候可能会纠结:审核不合格的退回,算不算一条数据流?算,F1.2 就是。数据流不一定都是“好东西”,退回的单据也是数据在流动。

4.4 第四步:检查每条数据流,别让箭头悬空

图画完,逐条念一遍:“储户给审核什么?审核给处理什么?处理给储户什么?处理跟账目库之间读什么写什么?”念不通的地方就是问题。

常见检查点有三个:第一,每个加工是不是至少有一个输入和一个输出?只有输入没有输出,说明这个加工没产生结果;只有输出没有输入,说明数据凭空来的。第二,每个数据存储是不是既有流入又有流出?只写不读或者只读不写,都要回头补。第三,有没有数据流从外部项直接连到数据存储?有的话,中间补一个加工。

这一步花的时间往往比画图还多,但值得。我自己的习惯是拿一支红笔,把每条数据流从头到尾用手指划一遍,划到一半卡住的地方,就是漏掉的东西。

4.5 第五步:跟“用户”对一遍,用大白话讲图

图是给人看的,所以最后一步是讲图。你假装对面坐着一个不懂技术的储户,指着图说:“您把取款单和存折给我们,我们先审核,不合格的退给您,合格的拿去做取款处理,处理的时候会查账目、记一笔取款记录,最后把存折、利息单、结算清单和现金给您。”

讲的过程中,对方如果问“那我密码输错怎么办”,你就知道图上少了一个判断分支或者少了一条异常数据流。数据流图不画判断逻辑,但异常数据流该有还得有。讲完一遍,把对方问的问题记下来,回头补图。这一步不是形式主义,它是数据流图“面向用户”这个特性的落地。

5. 避坑指南:新手画数据流图最容易翻车的五个地方

这一章是我带新人时反复讲的内容,每一条都对应一个真实翻车现场。你画的时候对照着看,能少走很多弯路。

5.1 现象:图上出现“外部项直连数据存储”的箭头

原因:新手觉得“数据从储户直接存进账目库”很自然,就画了一条线。但数据流图的原则是数据流必须经过加工,存储不能自己跟外部对话。

解决:在中间补一个加工,哪怕这个加工只是“登记”。比如储户的数据要先经过“取款审核”或“取款处理”,才能进账目库。补完之后检查:这条数据流有没有名字?名字能不能说清楚存的是什么?

5.2 现象:加工只有输入没有输出,或者反过来

原因:画图时想着“这个加工就是收数据的”,忘了它总得产出点什么。或者把“打印”画成只有输出,忘了它要从存储里读数据。

解决:每个加工至少一进一出。如果某个加工确实只进不出,那它可能不是加工,而是一个数据存储;如果只出不进,那数据来源没交代清楚。回头补数据流,别留悬空加工。

5.3 现象:数据流名字写成“数据”“信息”“结果”这种糊弄词

原因:画图时图快,懒得想名字。但数据流图是给用户看的,名字含糊等于没画。

解决:名字要能直观反映含义。把“数据”改成“取款单、存折”,把“结果”改成“合格存折、取款单”。一个简单的自测方法:把名字念给旁边的人听,他能不能猜出这股数据大概是什么。猜不出就重写。

5.4 现象:一上来就画最细的图,画到一半发现漏了外部项

原因:没有自顶向下,直接扎进细节。细节一多,边界就模糊了。

解决:强制自己先画关联图,再画第一层,再决定要不要拆第二层。每层画完停一下,问“这一层的外部项和数据存储齐了吗”。入门阶段画到两层就够了,别追求一次画到底。

5.5 现象:同一股数据流在两个加工之间来回画了好几条线

原因:没分清“一股数据”和“多股数据”。两个符号之间可以有多个数据流,但每条都应该是不同的数据内容,不是同一股数据拆成几条画。

解决:合并同名同内容的数据流。如果确实是两股不同数据(比如“合格单”和“不合格单”),那就分别命名、分别画。画完数一数,两个框之间的箭头超过三条,就停下来想想是不是可以合并或者分层。

6. 下一步学什么:从会画一张图到画清楚一套图

画完银行取款那张图,你算是迈过了门槛。但数据流图真正用起来,往往不是一张图,而是一套图:关联图、顶层图、一层图、二层图,层层往下拆。下一步我建议你按这个顺序练,别跳步。

阶段练什么具体做法
第一周把四个符号画熟每天拿一个生活场景(点外卖、借书、挂号)画关联图,只画外部项和一个加工
第二周练一层分解把关联图里的加工拆成两到三个子加工,补上数据存储
第三周练检查和讲图画完找一个人,用大白话讲一遍,记录他问的问题并补图
第四周练一个完整小系统选“图书预订”这类有明确输入输出的场景,画到两层图

练的时候有两条建议。第一,先别碰画图软件,用纸和笔。纸笔改起来快,软件容易让你把时间花在调框的大小和对齐上。第二,每张图都写一行“图名 + 层号”,比如“银行取款系统一层图”,不然过两天你自己都分不清哪张是哪张。

如果你想再往深走一步,可以去了解数据词典。数据流图上的每个数据流名、加工名、存储名,在数据词典里都有一条定义,说明它由哪些数据项组成。数据流图配数据词典,才算把逻辑模型说完整。入门阶段不用急着学,但知道有这个东西,画图时命名会更谨慎。

最后说一个我自己的习惯。从那以后我每次画完数据流图,都强制走一遍“三问”:这股数据从哪来?经过谁?最后到哪去?三个问题答不上来的箭头,一律删掉或者补全。这个习惯帮我省掉了无数次返工。希望帮到你,从今天这张银行取款图开始,动手画你的第一张。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进