数据流图 (DFD) 用于表示业务信息系统中的数据流,它表达了系统中的据传从输入到存储间所涉及的程序。
数据流图可以分为逻辑形和物理形。逻辑数据流图描述了用以完成某业务功能所涉及的、业务层面的数据流动, 物理数据流图则描述系统层面的数据流动。
数据流图以将用以寻找、编辑、存储和分发数据的功能或过程图像化,方便用户和系统设计人员沟通。数据流图的结构也容让开发人员从高点分析系统,继而生成一系列用以深入分析的图表。数据流图被广泛应用,原因如下:
数据流图有四个基本符号。
一个程序负责接收输入的数据,并产生具有不同内容或形式的输出。程序可以简单如将收集的数据保存在数据库,也或者复杂如将数据加以分析并生成报表。
每个程序都有一个名称来标识它所执行的功能。
名字由一个动词组成,后跟一个单数名词。
例子:
数据流是数据从信息系统的一个部分移动到另一个部分的路径。数据流可以表示单个数据元素,例如客户 ID,或者一组数据元素 (或数据结构)。
例子:
注意:
由于每个程序都将数据从一种形态转换为另一种形态,故每个程序必须至少有一个输入数据流和一个输出数据流。
数据流图的一大原则是数据不能自行转换成另一形态,数据必须经由某程序的处理才可被分发至系统的某个部份。通过这条规则,我们可以非常容易地识别出错误的画法并加以纠正。
错误 | 正确画法 | 原因 |
---|---|---|
![]() |
![]() |
没有经由程序处理,故实体不能将数据传送至另一个实体。 |
![]() |
![]() |
数据不能直接从实体移动到数据存储而没有事先经由程序处理。 |
![]() |
![]() |
数据不能直接从数据存储移动至实体而没有事先经由程序处理。 |
![]() |
![]() |
数据不能直接从一个数据存储移动到另一个数据存储而没有事先经由程序处理。 |
当一个程序步骤的输出与其输入不匹配时,会出现第二类错误,它们可以分类为:
当系统必须保留数据以让一个或多个程序使用或存储数据,便可以数据存储来表达。
注意:
外部实体是向系统提供数据或从系统接收输出的人、部门、外部组织或其他信息系统。外部实体是信息系统边界之外的组件,它们代表了信息系统如何与外界交互。
注意:
高至低分解用于展示更多细节。透过平整,我们将绘制出多张数据流图,一张比一张详细,直到达到所需的细节层次为止。如下图所示,我们会先在最高层次的数据流图中将目标系统表达成单个程序,然后将程序分解成更多层的数据流图,以表达更多细节,直到所有程序都是功能性程序为止。
当对数据流图进行高至低分解时,输入和输出数据流必须在数据流图之间保存一致。例如,级别n&n + 1必须具有相同的输入和输出。
背景图用于表达一个系统的概览,它是数据流图中的最高级别,只包含一个代表整个系统的程序。这程序会被分解成更多细节的主要程序,每个主要程序可能会进一步分解以提供更多细节。
第 0 阶数据流图中的程序 (具有整数)可以进一步分解以表示程序的细节。下面的例子显示了程序被分解成下一个阶级(第 1 阶)。
注意:
虽然下面的第 1 階数据流图只有三个程序 ,但是这些程序涉及不少数据的输入和输出,繼而導致交叉线的出現。为避免这个情況,我们可以在数据流图中使用多重視角,讓同一元件重覆出現在圖中的不同位置。
如果一个程序跟大量外部实体存在数据的输入和输出,我们可以首先将该程序和相关的外部实体提取到单独的数据流图,然后再将该进程细化到单独的数据流图级别,通过这种方式可以更容易确保它们之间的一致性。
数据流图被分类为逻辑形或物理形。逻辑数据流图主要表达了业务和业务运作,它不关心系统将如何构建。我们可以忽略实现细节,如计算机配置、数据存储技术、信或消息传递方法,而集中表达系统所执行的功能,如数据收集、数据跟信息的转换和信息报告。
物理数据流程图显示系统将如何被建设起来,包括系统中的硬件、软件、文件和人员。它使逻辑数据流图中描述的程序正确地实现以达到业务目标。
以下示例显示了一家杂货店收银员的逻辑数据流图和物理数据流图:
逻辑数据流图说明了所涉及的过程,而没有详细描述活动的物理实现。