第3章结构化系统分析(4)第3章结构化系统分析(3)23.5系统分析中的数据建模与分析概述3.5.1功能分析与数据分析传统的结构化分析与设计方法是以功能(处理)为中心的。系统分析中首先要建立功能模型(如数据流图),数据根据功能提供或生成。当系统规模小、数据量不太时,可以根据数据字典凭经验对系统的数据进行有效的组织与管理。随着系统规模和处理的数据量不断扩大,数据的复杂性急剧增加,加上数据库与网络技术的迅速发展,数据资源在信息系统中的重要性突显,面对大量种类繁多、分布分散的数据资源,为保证数据的完整性、一致性与安全性,控制其冗余程度,方便存取与维护,在系统分析中,也需要进行数据建模与分析,以便更好地利用数据库与网络技术科学、合理、高效、安全地管理和利用数据资源。第3章结构化系统分析(3)3一个系统的数据模型是此系统产生、使用、维护、管理的数据的形式化描述,描述了与系统有关的人、物、地点、事件和流程以及概念的各类信息及其相互关系。系统分析阶段创建的数据模型反映这些数据的业务属性及业务关系,为高效、安全地开发,利用与管理系统的数据资源提供科学、合理的概念框架和逻辑模型,不涉及时这些数据的存储和处理的技术方案。系统分析阶段建立的数据模型通常称为概念数据模型或逻辑数据模型。概念数据模型的建立方法有多种.PChen于1979年提出的实体一联系(Entily-Relationship,ER)模型应用广泛。下面概要讨论实体-联系模型的基本概念和建模方法。第3章结构化系统分析(3)43.5.2系统数据的实体一联系模型实体-联系(E-R)模型的基本概念包括实体、实体的属性和实体之间的联系。1.实体(Entity)系统需要存储和利用某类事物的数据。这里,一类事物指具有类似性质的具体事物的集合。在ER模型中,实体定义为一类事物的抽象。实体可描述的事物十分广泛,其中包括:个人和组织(群体)、地区和地点、物品(如机器、产品、软件包等)、事件和活动(如注册、预订、生产、销售等)以及概念(如课程、计划、产品质量等)等。一个系统中各实体必须命名,实体的名称用反映该实体所表示的一类事物特征的词或短语(文本型数据)描述,应当简洁、唯一、易理解。第3章结构化系统分析(3)52.属性(Attribute)实体的属性是指该实体表示的一类事物的所有实例的特征。实体的某个属性由给定的属性名来标识。而实体中每个实例对应于某个属性的数据称为该属性的数值(Value),简称属性值。一个实体可以具备多种属性。系统的E-R模型中实体的属性应至少应用于一个业务流程中。不可分割的属性称为原子属性,如性别、年龄、工资级别、商品价格等一般是不可分割的原子属性。可以分解成若干原子属性的属性称为可分属性(又称组合属性),如学号、姓名、身份证号等都是可分属性。能唯一标识(区分)一个实体不同实例的某个属性或某些属性的组合称为该实体的标识符或主键。可唯一识别不同实例的实体属性或属性组合可能不止一个,应确定其中之一为标识符或主键,其他称为替代键。第3章结构化系统分析(3)6E-R模型可用图形表示,称为实体-联系图(Entity—RelationshipDiagram,ERD),或称E-R图。E-R图中一种表示实体的图形是带圆角的方形,如图(a)所示。如果同时表示实体及其属性,则如图(b)所示。第3章结构化系统分析(3)7合法的或者说在业务上有意义的属性值取决于其数据类型、定义域和默认值。也就是说,数据类型、定义域和默认值是属性值的三个主要特征。属性值的数据类型如下:数字型、文本型(字符型)、备忘录型(非结构化文本)、O-1型(如是/否、开/关等)、日期型、时间型、数值区间型、数值集(有限个或可列个数值的集合)型、音响型、图形图像型以及影视型等。属性值的定义域是指实体的所有实例的属性值取值的合法范围,如数字型数据的取值区间、实数型数据的取值精度、文本型数据的最大/最小字符长度等。一个实例某属性值的默认值是指,如果用户没有指定值,系统对属性的取值。这里有三种情况:一种情况是采用定义域中的某个合法值(如0或1,或其他合理值);另一种情况是对于此实例,该属性可不考虑,其值记为“无”(None)或“空”(Null);第三种情况适用于目前没有适当的值作为默认值,但要求用户必须取一合法值,记为“要求取值”(Required)或“非空”(NotNull)。第3章结构化系统分析(3)8在建模过程中根据所分析问题的广度、深度与领域、性质的不同,实体、属性、实例三个概念也可相互转化。例如,“交通工具”这个实体的一个实例是“汽车”,而在很多情形下,“汽车”可作为实体来建模。又如,“课程”、“专业”在某些情况下可作为实体“学生”或者“教师”的属性,但在学校的系统中,“课程”、“专业”又是重要的实体。因此,建立一个系统的E-R模型,对实体、属性、实例等概念必须有一个清晰、合理的概念体系和总体数据结构,避免造成数据混乱和不必要的冗余。第3章结构化系统分析(3)93.联系(Relationship)在E-R模型中,联系描述实体之间的固有的和业务的联系。一个系统的目标与功能的实现是由于实体之间在给定条件下相互联系、相互作用的结果。因此,联系是建立系统的ER模型的重要概念之一。设有两个实体分别以A和B表示,在实体A中,称实体A与实体B的任一实例有联系的A的实例数为实体A对实体B的联系基数(cardinality),简称基数。两个实体之间的联系是E-R模型中最基本的联系。(1)一对一联系。简记为1:1。(2)一对多联系。简记为1:N。(3)多对多联系。简记为N:M。实体间的上述联系可以用下图来表示。第3章结构化系统分析(3)10如果同时考虑两个实体的最大值与最小值,两者的联系就要复杂一些。基数的最小值可以取0、1或大于1的数。下表描述了实体A对实体B的联系基数的几种情况。第3章结构化系统分析(3)11上面讨论的是实体A对实体B可能存在的联系。相应的,实体B对实体A的任一实例也可能存在上述五种联系基数。这样,从逻辑上讲,任意两个实体之间可能的联系有5×5=25种。当然,两个实际的实体,由于本身的特性和业务规则的约束,往往只有一种或数种业务上有意义的联系。两个实体的联系要进行合理的命名。实体A与实体B的联系通常以“(A对B的联系)/(B对A的联系)”的形式标注。在ERD中,联系名标注在联系图形符号旁。下图所示是学校系统中课程与学生两个实体的联系,课程对学生是“被注册”,学生对课程是“学习”,标注为“被注册/学习”。对于任一学生实例,至少有一门课程被注册,课程对学生的联系基数大于或等于1(≥1);而对于任一课程实例,可能没有学生或有多个学生注册,学生对课程的联系基数大于或等于零(≥0)。据此来确定两个实体的联系基数及相应的图形符号。第3章结构化系统分析(3)12学生修课系统简化的ERD的初稿示于图下中。学生修课系统是学校学籍管理系统的一部分,系统中省略了有关管理与统计、分析环节。图中描述了各实体名和联系名及联系基数,其中学生、教师、课程、教室是系统中相对独立的实体,这些实体之间的联系都是多对多联系,不能确切表达各实体的实例之间的联系,难以清晰反映教学的实际情况。例如,某个教师实例什么时候开哪门课程(实例),教哪些学生(实例);某个学生实例修哪些教师(实例)开的课程,在下图所示的实体一联系中难以简洁表达。第3章结构化系统分析(3)13通过定义“开课安排”(又可命名为“教学安排”)、“课程注册”两个实体将上述四个实体关联起来,以建立起各实体的实例之间的确定性联系,称这类实体为关联实体。补充关联实体后的简化的ERD示于下图中。第3章结构化系统分析(3)14各实体的部分属性示于下下图所示的ERD中。其中,主键以*号表示,一个实体的属性是其他实体的主键时,称这个属性为外键,图中用#号注明。这样,上述问题提供关联实体就可得确定答案。第3章结构化系统分析(3)153.5.3实体一联系模型建模的步骤E-R模型建模的一般步骤如下:(1)识别与定义实体。在给定的组织范围内明确系统的业务领域,分析与系统业务有关的人、组织、物、事件、活动、概念等事物,确定系统需要收集、利用、处理与存储数据的事物类型,将这些事物类型定义为系统的实体,每个事物类型包含的具体事物为该实体的实例。明确各实体的实例的规模。第3章结构化系统分析(3)16Isa类型有些情况下,某个实体可作为较高层次或较大粒度实体的实例,或者某个实体的实例可作为较低层次或较小粒度的实体。这种联系称为种类与成员(isa)联系,又称为分类(Classification)联系。在分类联系中,粒度大的实体称为超类(Super-class),粒度小的实体称为子类(Subclass)。子类实体继承超类实体的属性。例如,交通工具实体与汽车实体的联系就是分类联系。Apartof类型另一种情况是,数个不同类型的较小粒度实体组合成一个较大粒度的实体,或者一个较大粒度的实体拆分成数个不同类型的较小粒度实体。此时大小粒度实体的联系为部分与整体(apartof)联系,或称组装(Assembly)联系。例如,汽车发动机实体与汽车实体的联系就是组装联系。实体之间的其他各种联系取决于实体在业务活动中的相互联系、相互作用。第3章结构化系统分析(3)17(2)识别与定义属性。对每一个实体,识别系统需要收集、利用、处理与存储其值的属性。确定这些属性的名称、属性值的定义域和默认值。对于非结构化、图像、音频、视频等多媒体数据也要对数据存储量进行估计。要根据业务改革与发展和环境变化来确定实体的属性,每一个属性都应在当前或未来的业务活动中应用。第3章结构化系统分析(3)18(3)确定实体的主键(标识符)和外键。主键(标识符)是能唯一识别实体每个实例的属性或属性组合。可能不止一个属性或属性组合能唯一识别实体的实例,但只能指定其中一个作为主键,其他称为替代键。如图中,实体学生的学号是主键,学生身份证号是替代键。在系统的生命周期内,主键的值不应发生变化。当两个或多个实体共有某些属性时,要识别这些实体是否是分类联系。第3章结构化系统分析(3)19如果是子类实体继承超类实体的所有属性,各子类还有自己特定的属性。如果不是分类联系,就要分析这些属性的数据(属性值)源于哪个实体的实例,哪些实体的实例只是使用这些数据。为了保持数据的一致性,减少数据的冗余,把数据源实体的主键作为其他使用数据实体的外键来标识。在图中,课程实体的主键课程编号是开课安排、教师、课程注册三个实体的外键。第3章结构化系统分析(3)20(4)识别与定义实体之间的联系。在系统涉及的业务领域内分析实体之间的联系。这种联系必须是系统现在和未来的业务活动中需要维系和处理的业务联系。通过业务活动中各实体的实例间联系的分析来确定联系名称、联系基数与类型。(5)进一步识别实体间是否存在不确定联系。在识别与定义实体、确定系统中相对独立的实体之后,要进一步识别实体间是否存在不确定联系,当各实体的实例之间联系出现不确定性时,需定义关联实体,以建立各实体的实例之间的确定性联系。(6)绘制实体一联系图(ERD)。上述各步骤在实施时要认真分析、审核,反复迭代进行,不断修正,方可得到满意的结果。第3章结构化系统分析(3)213.5.4数据建模与分析在系统分析中的作用传统的结构化系统分析并不强调另行的数据建模与分析。结构化系统分析建立了基于数据流图和数据字典的模型。数据流图是以数据加工为核心的,这个模型是系统的功能模型,系统的数据需求源于功能需求。在系统数据量较小、数据关系不复杂的情况下,可以根据功能分析得到的数据需求进行数据管理,若应用数据库技术,则在系统设计阶段根据数据需求进行数据库设计;但如果数据量较大,功能与数据之间共享关系比较复杂,单靠功能建模中的数据字典进行整个系统的数据管理,难以处理数据冗余和一致性、完整性问题。例如,学校系统中的人事、教务、科研、学生学籍管理等子系统,都可能有名为“教师’’的数据流,但此数据流包含的数据项在不同子系统中又不一致。第3章结构化系统分析(3)22为了保证数据的完整性与一致性,减少