五、数据分析及数据字典
数据分析的目的是把数据流图中未能详细表述的,有关数据的各种材料进行汇总整理,以便得出具体的完整的认识,以备后用。
数据分析最主要的工具是数据字典。数据字典是一种表格,它把系统中有关数据的各种信息汇总起来,并把数据之间的关系表示出来。
数据流和数据存储都是组项,即是由更小的数据单位(子项或基本项) 组成的数据。例如,库存总帐,其内容包括零件号、零件名、生产厂家、数量、单位和单价。这样库存总帐中的每一条就包括六个基本项,即不能再分割的具有逻辑含义的最小的数据。有时,组项所包括的各项中还有组项,还可以进一步分解。例如,人事档案中的地址一项,就可以进一步分解为城市名、区名、街道名、门牌号四个基本项,这样,地址也是一个组项。
在数据字典中,组项和基本项的内容是有所区别的。
对于组项,首先要指出其组成,即它包括哪些子项。这些子项可能是基本项,也可能是组项。组项中包括数据存储与数据流,也包括由它们分解而得到的低一级的一般组项。编写数据字典时,可以先从数据存储开始,因为数据存储比数据流少,而且它处于各项业务交点,它的组成比较复杂(我们可以采取对数据流图中出现的各种记号进行编号的方法以防遗漏)。把数据存储列举齐备之后,再列举数据流。当这些都列举出来之后,再找出它们分解成的子项中的所有组项。等到所有的组项都分解成了基本项,我们就可以把所有涉及到的基本项再罗列出来。这样,数据字典的基本轮廓就有了。
由于基本项是数据的基本单位,我们需要严格定义它们的类型(数字、
汉字还是英文)、长度(一般按字符计算)、数量(指不同值的个数)。此外,还需要确定这些数据的值是在什么地方取得的,在哪些组项里存在,它的值是否经常变化,是否经常使用,在系统中的重要性如何。
此外,各个环节上数据的处理量有多大,也应在相应的数据后面标明。这里所说的处理量自然也要包括最大情况、最小情况及最经常出现的情况三个数值。
最后,数据的别名、编码方法、错误类型、错误率等有关信息也应记录在数据字典中,当然,这些并不是每一项数据都有的。
总之,关于数据本身的各种信息,应该尽可能地完整地汇总起来。
表 15.1 和表 15.2 就是在我们的实例中,数据字典内容的一部分。数据字典的编写是一件十分繁重的工作,需要花费相当的人力。在编写中主要是依靠前面的调查工作所积累的原始资料。如果在编写中发现有重要的遗漏, 则应该回过头去继续调查。
由于数据字典的编写十分繁琐,目前国外已有比较成熟的数据字典管理软件,可以帮助人们自动生成及编排数据字典。国内在这方面的工作也已开始,相信不久就会有成熟的软件提供使用。
除了列出数据字典这一基本工具之外,还可以利用其他工具帮助我们进行数据分析。例如,我们可以借助数据库理论中的规范化方法来分析系统中数据存储的情况,以指出存在的问题及改进的途径。如果能首先进行规范化, 数据字典的编制将更便于进行。规范化方法是数据库理论的内容之一。其基本思想是用数理逻辑的方法指出数据存储中的不合理现象,并指出消除这些不合理现象的途径与方法。我们在这里不可能介绍规范化的严格理论,而只能通过例子,作一极其简单的介绍。
表 15.1 数据字典之一——组项
项目 |
组成 |
类型 |
发出地 |
存储者 |
地点 |
---|---|---|---|---|---|
到货通知 |
零 件 名 生产厂家数量 单位 单价 |
数据流 |
外协厂 |
库工 |
仓库 |
领料单 |
车间名领料人零件名数 量 日期 |
数据存储 |
领料人 |
会计统计 |
仓库 |
库存总帐 |
零 件 号 零 件 名 生产厂家存量 单位 单价 |
数据存储 |
领料人 |
库工会计统计 |
仓库 |
合同 |
编号厂名 厂家地址零件号 数量 |
数据存储 |
外协厂外协组 |
外协组仓库 |
外协组 |
地址 |
省市名区县号街道名门牌号 |
一般组织 |
表 15.2 数据字典之二——基本项
数据项目 |
类 型 |
长 度 |
数 量 |
变动情况 |
使用情况 |
---|---|---|---|---|---|
外协厂名 |
汉字 |
<20 |
<50 |
基本不变 |
经常 |
零件编号 |
整数 |
<4 |
<200 |
基本不变 |
经常 |
库 存 量 |
整数 |
<6 |
<200 |
经常变动 |
经常 |
零件类别 |
汉字 |
<10 |
<30 |
基本不变 |
不经常 |
零件单价 |
两位小数 |
<10 |
<200 |
有时变动 |
财务使用 |
图 15.7 中列出了四个数据存储项,假定经过调查,在数据字典中给出了它们的构成如下:
合同:外协厂名、外协厂地址、外协厂电话、外协厂电报挂号、合同编号、签定日期、零件名、零件号、数量、单位、单价、总金额、已到数量。
库存总帐:零件号、零件名、当前库存量、单位、单价、库存金额。进货流水帐:外协厂名、合同编号、零件号、零件名、数量、日期。
发料流水帐:车间名、零件号、零件名、数量、日期。
用规范化的方法来检验,能够指出以下几点不合理的情况。第一,在合同的内容中,总金额是不必要的,因为它要可以由单价及数量计算而得到。第二,四个数据存储中都出现了零件号与零件名,如果从全系统考虑,这两者可以只保存一项,至多在合同和库存总帐中同时记录这两项,以备特殊需要时查找。第三,每一合同中都记录了外协厂名、外协厂地址、外协厂电话及外协厂电报挂号这一批信息。如果一个外协厂向我们提供四种零件,或者先后订了四份合同,那么这些信息就被重复记录了四次。以上这几种情况都造成了存储空间的浪费,在数据库理论中称之为数据冗余。第四,如果有一个外协厂的电话号码发生变动,接到这一通知以后,就需要逐个修改所有有关合同的记录内容,如果有一处遗漏了,就会在将来的工作中造成差错。类似的情况也发生在零件号与零件名的关系上,一旦零件的编号方法发生变更,所有四个数据存储都需要修改。如果有一处未修改,则系统中的数据就会互相矛盾。用数据库理论的说法,这叫做破坏了数据的一致性。第五,如果有一个外协厂已经与本厂确定了协作关系,但是具体的合同尚未签订。这时,系统中无法记载这个厂的地址、电话和电报挂号的号码。因为按目前的存储方法,外协厂和合同必须同时具备才能记入系统。这种情况称为插入异常。第六,如果一个外协厂的现有合同均已到期完成,各合同的记录已从合同这一数据存储中删除,我们需要与该厂签订下一期合同时,在系统中就无法找到其地址与电话号码,因为这些信息已经同以前各合同的信息一起被删除了,这种情况称为删除异常。
以上所提到的存储冗余、数据一致性的被破坏、插入异常、删除异常等种种弊病,正是数据库理论所试图解决的问题。数据库理论对于这些问题的发现方法及改善途径提出了一系列办法,规范化方法即是其中之一。作为通俗的理解,我们可以提出以下两点。
-
一个数据存储中的各数据项应该具有“独立性”,每个数据存储也应该具有“独立性”。也就是说,一个数据项的值不能被同一数据存储中的其他数据项所确定。如果那样,这一项就没有必要存在了。同样,一个数据存储的内容如果能根据其他数据存储的内容来确定,它也就没有存在的必要了。
-
数据存储的设置应尽量按照“一事一地”的原则来安排。这就是说,
应该尽量明确地用一个数据存储来记载一种实体的有关信息,不要出现一个数据存储记载多种实体的属性,或者一种实体的属性分别记录在几个数据存储之中。前面例子中的“合同记载”这一数据存储实际上存储了两种实体的属性——合同和外协厂。这种情况就会造成插入异常和删除异常。同时也会增加冗余量和修改时的困难。
如果读者能够学习一些数据库理论的知识,就能了解到有关的严格的概念、严密的证明以及系统的方法。在这里就不多谈了。
应该说明,我们在这里只是借用数据库理论中的方法来进行数据分析, 这在实际的工作中无论采用数据库与否,都是必要的。同时,独立性和“一事一地”是理论上的原则规定,在实际工作中,由于工作部门的体制、工作场所的分散、实际工作的方便等原因,常常不易完全做到,有时为了校对或安全等目的,还要有意地增加一些冗余的存储。因此,当我们发现现行信息系统中存在不合理的现象时,即可进而判断在这个实际系统中,这些现象是
应该保留还是应该纠正。即使用数据库,这些原则也还要灵活运用。