概要设计之面向数据流的结构设计
Posted yilang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了概要设计之面向数据流的结构设计相关的知识,希望对你有一定的参考价值。
简介
作为构造软件的基本框架,软件结构应该与需要分析时建立的分析模型保持一致。一种非 常有效的设计思路是,基于需求分析中的数据流模型进行软件结构映射,由此产生出软件系统 的基本设计模型。 为了方便从数据流模型中映射出软件结构来,需要对数据流进行合理的分类。例如,将数 据流分为变换流或事务流,然后按照它们各自不同的特点分别采取不同的映射方法。
变换流分析与设计
变换流
变换数据流所体现出的是数据从输入到加工再到输出的一般步骤。变换数据流对数据的加 工流程如下图 所示,这就是数据首先需要经过输入过程,将外部数据形态转变为适合进行加 工处理的内部形态;然后经过变换中心,将已转成内部形态的输入数据加工成一种新的数据形 态;接着再经过输出过程,将经过加工产生的新的数据结果转换成适合向外导出的数据形态。
高层框架
由于变换数据流将整个过程分割成了输入、变换和输出三个部分,因此,对软件结构的映 射也就可以是在总控模块之下,将软件分为输入、变换、输出三个部分。为了减轻总控模块的 控制负担,可以针对这三个部分,分别设置控制模块,由此获得对各个区段的有效控制。
下图是基于变换流的高层框架图。
下层模块
当软件结构的高层框架被确定下来以后,接着需要考虑的是那些涉及具体操作的下级模 块。为了确定下级模块,并能够按照一定规则 将这些下级模块挂接到上面的框架上去,有必要对变换数据流进行分段研究。
(1)输入部分
一般情况下,可以把来源于外部端口的数 据流称为物理输入点,而把由输入过程进入到变 换中心的数据流称为逻辑输入点。图 5-28 中的 输入部分从“物理输入点”到“逻辑输入点”, 其模块挂接规则是从“逻辑输入点”往“物理输入点”进行搜索,所遇到的每一个处理框可以作 为一个功能模块依次挂接到“输入控制”模块之下。
(2)变换部分
图 5-28 中的变换中心涉及“计算 1”与“计算 2”两个处理框。可以将这两个处理框对应 为功能模块直接挂接到“变换控制”模块之下。
(3)输出部分
一般情况下,可以把由变换中心流向输出过程的数据流称为逻辑输出点,而把由输出过程 流向外部端口的数据流称为物理输出点。图 5-28 中的输出过程从“逻辑输出点”到“物理输出 点”,其模块挂接规则是从“逻辑输出点”往“物理输出点”搜索,所遇到的每一个处理框可以 当做一个模块依次分层挂接。 依照上述方法,可以获得对图 5-28 中的变换数据流的软件结构映射,产生的软件结构如 图 5-30 所示。
事务流分析与设计
事务流
当输入的数据流可以引发多个不同的事务活动流程,并且数据流图中有一个明显的事务调 度中心时,这种数据流被称为事务数据流。其特征如图 5-31 所示。需要注意事务流中的事务调 度中心与变换流中的变换中心的区别,事务调度中心并不对输入数据进行加工,而只是根据不 同的输入数据作出不同的事务流程选择。
软件结构
事务数据流以事务调度中心为核心,在此之前为接收事务,在此之后为事务分流处理。因 此,基于事务流的软件结构映射也就可以是在总控模块之下将软件分为接收事务与事务活动两 个部分。为了减轻总控模块的控制负担,可以针对这两个部分分别设置控制模块,例如“接收 事务控制”模块、“调度事务控制”模块,以获得对各个区段的有效控制。 在事务流软件框架确定以后,接着需要考虑其下层模块的挂接。对此,以“事务调度中心” 为起点,分别搜索事务输入流与事务活动流,将所遇到的每一个处理框当做一个功能模块依次 挂接到“接收事务”模块或 “调度事务”模块之下。 依照上述方法,可以获得对图 5-31 中的事务数据流的软件结构映射,产生的软件结构如 图 5-32 所示。
混合流分析与设计
前面分别讨论了变换分析与事务分析。其中,变换分析是软件结构设计的主要方法,大部 分软件系统都可以按照变换分析方法进行设计。但是,在很多情况下仅使用变换分析是不够的, 还需要采用其他方法,事务分析就是一种非常有效的方法。例如商业数据处理系统,其主要组 成部分就往往使用事务处理方法进行设计。 软件系统也可以是变换流与事务流的混合,如图 5-33 所示为典型的变换流与事务流的混 合。对于这样的系统,通常采用变换分析为主、事务分析为辅的方式进行软件结构设计。其一 般设计思路如下:
(1)首先利用变换分析方法把软件系统分为输入、变换和输出三个部分,由此设计出软件 系统的上层构架,例如顶层和第一层模块。
(2)然后根据数据流图各部分的结构特点,适当地选择变换分析或事务分析,由此设计出 软件系统的下层构架。 如图 5-33 中的混合数据流,即可以根据上述设计思路进行软件结构映射,由此可以产生 出如图 5-34 所示的软件结构初始方案。
数据库结构设计
数据库技术产生于 20 世纪 70 年代初期,从这个时期起,数据库技术经历了层次型、网状 型、关系型三种模型。在数据库应用早期,由于层次型、网状型具有的性能优势,它们占据了 初期阶段的主流位置。但从 20 世纪 80 年代起,随着计算机性能的迅速提高,关系型数据库所具有的数学计算方面的优势受到了重视,它逐渐成为主流数据库,并得到了层次型、网状型不 曾有过的更加广泛的应用。例如 Oracle、SQL Server 这些耳熟能详的通用大型数据库都是关系 型数据库。 数据库就是与特定主题或目标相联系的信息的集合,例如人事数据库、工资数据库等。数 据库的作用是能够为软件系统提供后台数据存储与运算。许多应用系统需要依赖数据库提供数 据服务,尤其是一些信息管理系统,则更是以数据库为中心进行部署。 与一般数据文件比较,数据库具有以下方面的优越性:
(1)数据库具有特殊的数据存储结构,例如,关系型数据库中的表结构,更加适宜对数据 进行有效的组织、存储和检索。
(2)数据库具有更加完善的数据完整性约束机制,例如,可以通过设置和字段相关的主键、 外键,从而建立起数据表集之间的关联;可以设置对数据字段、记录的检验规则,以限制数据 存储范围。
(3)数据库能够实现数据存储结构与数据表现形式的有效隔离,例如,可以通过数据视图 而获得对数据表集更加有效的应用组合。 本节将简要介绍数据库的结构设计,并将从逻辑结构设计和物理结构设计这两个方面分别 给予说明。
1.逻辑结构设计
需求分析中已建立了有关数据库的数据关系模型。但是,数据关系模型是基于对用户应用 域的分析而构造的,是一个有关现实数据环境的数据库概念模型。显然,这种接近于现实世界 的概念模型与计算机世界之间的距离太大了,不能够直接向数据库实现过渡。因此,为了方便 数据库的创建,需要将数据库概念模型进行转换,建立一种更加接近计算机世界的数据库模型。
概要设计中需要建立的有关数据库的逻辑结构,就是一种与计算机世界更加接近的数据模 型,它提供了有关数据库内部构造的更加接近于实际存储的逻辑描述,因此能够为在某种特定 的数据库管理系统上进行数据库物理创建提供便利。
(1)设计数据库
在关系型数据库中,数据是以数据表为单位实现存储的。因此,数据库逻辑结构设计首先 需要确定的就是数据库中的诸多数据表。
可以按照以下规则从数据关系模型中映射出数据库中的数据表来。
a.数据关系模型中的每一个实体应该映射为数据库逻辑结构中的一个数据表。另外,实 体的属性对应于数据表的字段,实体的码对应于数据表的主键。
b.数据关系模型中的每一个 n : m 关系也应该映射为数据库逻辑结构中的一个数据表。 另外,与该关系相连的各实体的码以及关系本身的属性,应该映射为数据表的字段;而与该关 系相连的各实体的码,则需要组合起来作为关系数据表的主键。
c.数据关系模型中的每一个 1 : n 关系可以映射为一个独立的数据表(映射规则类似 n
: m 关系)。但在更多情况下,这个 1 : n 关系则是与它的 n 端对应的实体组合起来映射为一个数 据表。当 1 : n 关系是与 n 端对应实体合并组成数据表时,组合数据表的字段中需要含有 1 端 实体的码属性。
d.数据关系模型中的每一个 1 : 1 关系可以映射为一个独立的数据表,也可以与跟它相 连的任意一端或两端的实体合并组成数据表。实际上,两个依靠 1 : 1 关系联系的数据表可以 设置相同的主键,为了减少数据库中的数据表的个数,往往将它们合并为一个数据表。合并方 法是将其中一个数据表的全部字段加入到另一个数据表中,然后去掉其中意义相同的字段(包 括意义相同但名称不同的字段)。 图 5-37 是一个用于描述教师、课程、学生三者之间关系的数据关系模型图。可以按照上 述规则对这个数据关系模型进行映射,由此可以产生出以下数据表结构: 教师(教师编号,姓名,性别,职称,学历) 课程(课号,课名,计划课时,学分) 学生(学号,姓名,性别,专业,班级) 讲授(教师编号,课号,实际课时) 学习(学号,课号,成绩)
(2)规范数据表
从数据关系模型映射出来的数据表是直接建立在用户应用域基础上的数据表。实际上,同
一个数据关系模型可以有许多种不同的数据表组合。为了使数据库逻辑结构更加科学合理,设
计过程中,一般还需要按照关系数据库规范原理对数据表进行规范化处理,由此可消除或减少 数据表中存在的不合理现象,例如数据存储冗余、数据更新异常。
关系数据库规范原理是基于数据冗余程度提出的,包含第一范式(1NF)、第二范式(2NF) 、 第三范式(3NF)、BC
范式(BCNF)、第四范式(4NF)和第五范式(5NF)。其中,第一范式规范
化程度最低,数据表内部多余联系最多,数据冗余最大;第五范式规范化程度最高,数据表内 部几乎没有多余的联系,数据冗余最小。
显然,通过提高数据表范式级别可以降低数据表中的数据冗余,并可减少由于数据冗余造
成的数据更新异常。但是,为了提高数据表范式级别,就需要清除数据表内部的多余联系,这 就需要对数据表进行分解。
值得注意的是,对数据表的分解大都会使对数据的查询操作复杂起来(例如多表联接操作),由此会降低数据查询性能。
在数据库实际应用中,为了既能使数据冗余与数据更新异常现象有所减少,又能使数据查 询性能不会出现显著下降,大多选用第三范式作为设计优化依据。
下面是对数据表中第一范式、第二范式和第三范式的描述。
a.第一范式 数据表中的每一个字段值都必须是不可再进行分割的原子数据。
b.第二范式 满足第一范式条件,而且已经消除数据表中可能存在的非关键字段对关键字段集中个别字 段的部分依赖关系。也就是说,每一个非关键字段都只能由整个关键字段集决定,而不能由关 键字段集中的个别字段决定。
c.第三范式 满足第二范式条件,而且已经消除数据表中可能存在的非关键字段之间的传递依赖关系。 也就是说,每一个非关键字段都只能由关键字段集决定,而不能由非关键字段集决定。 一般情况下,如果数据表中的数据需要经常更改,这个数据表可以选用第三范式,甚至 BC 范式。但如果数据表中的数据不会更改或很少更改,却经常需要查询,并且要求有较高的查询 性能,则可以选择第二范式,甚至第一范式。
(3)关联数据表
关联数据表就是将数据关系模型中数据实体之间的关系在数据库逻辑结构中明确体现出 来,它们将作为建立数据表之间参照完整性规则的依据。 图 5-38 是数据库的逻辑模型图,其中的连线表示了数据表之间的关联,连线带箭头一端 为主表,另一端为从表。其中,标记 PK 表示主表中的主键,标记 FK 表示从表中的外键。主表 与从表的关联就建立在主表的主键字段集和从表的外键字段集之间。
(4)设计数据视图
数据视图也称做虚表,原因在于数据视图与数据表一样,都可以将数据以记录集合形式表 现出来。但是,数据视图是面向系统前端应用的不同用户的局部逻辑层。因此,它与面向系统后台全局数据存储的数据表也就有着许多不同之处。 一般说来,数据表具有相对稳定的存储结构,它所存储的数据是具体的,并最终会以物理 形态在数据库中出现。然而,数据视图却是面向用户的外模式,它并不涉及具体的数据存储, 而只是嵌入在数据库中的 SQL 查询操作,因此可以根据用户的应用需要进行比较灵活的数据组 合,满足不同用户的数据应用需要。 数据视图的作用是能够使数据表现与数据存储之间进行有效的逻辑隔离。实际上,数据视 图为数据库前端应用提供了许多便利。例如,可以使用一些更符合前端用户习惯的数据名称, 可以根据用户对数据的特殊需要进行专门的数据视图定义,可以使数据库中的数据具有更高的 安全性,可以简化前端程序员对数据库的复杂编程等。
2.物理结构设计
数据库最终是要存储在物理设备上的。数据库在物理设备上的存储结构与存取方法称为数 据库的物理结构。为一个给定的逻辑数据模型选取一个最适合于应用的物理结构的过程,就是 数据库的物理结构设计。 数据库物理结构设计总是需要依赖于给定的计算机系统,例如,所选用的 DBMS 的特点, 需要开发的应用系统对处理频率和响应时间的要求等。
(1)数据存储结构
在确定数据库中数据的存储结构时,需要综合考虑数据存取时间、存储空间利用率和维护 代价这三方面的因素。并且,这三个方面还常常是相互矛盾的,例如,消除一切冗余数据虽然 能够节约存储空间,但往往会导致检索代价的增加,因此必须进行权衡,选择一个折中方案。 为了提高系统性能,有必要根据数据应用情况将易变部分与稳定部分、经常存取部分和存 取频率较低部分分开存放。例如数据库数据备份、日志文件备份等,由于只在故障恢复时才使 用,而且数据量很大,可以考虑存放在磁带上。
(2)数据索引与聚集
为了提高对数据表中数据的查询速度,可以在数据表的字段或字段集上建立索引。需要注 意的是,索引虽然可以提高查询速度,但索引却需要占用磁盘空间,并且会降低数据更新速度。 因此,对于是否设置索引,往往需要根据实际应用进行权衡。如果数据需要频繁更新或磁盘空 间有限,则不得不限制索引个数。 许多关系型 DBMS 还提供了聚集索引功能,与一般索引比较,它能够带来更高的查询效率。 但必须注意的是,聚集索引只能提高对某些特定字段的查询性能,而且会带来更大的维护开销 和存储空间消耗。因此,只有在聚集字段是最主要的查询字段时,才有建立聚集的必要。
(3)数据完整性
为了使数据库中的数据更加便于维护,还需要在数据库中建立数据完整性规则,包括实体 完整性和参照完整性。 实体完整性是指数据库对数据表中记录的惟一性约束。为了使数据表具有实体完整性,需 要在数据表中设置主键,由此可确保数据表中的每一条记录都是惟一的,也就是说不会出现重 复记录。 数据库参照完整性则是指建有关联的数据表之间存在的“主表”对“从表”的一致性约束。由此可使从表中外键字段的取值能够受到主表中主键字段取值的限制。例如,只有当主表的主 键字段中存在该值后,从表的外键字段才能取用该值;并可使得当主表中主键字段值更改时, 从表中对应的外键字段值可以自动同步更新,或使得当主表中有记录删除时,从表中外键字段 值和主表中主键字段值相同的相关记录也被一同删除。
以上是关于概要设计之面向数据流的结构设计的主要内容,如果未能解决你的问题,请参考以下文章