1、第2章 数据模型第第2 2章数据模型章数据模型2.1 实体关联模型实体关联模型 2.2 扩展的扩展的E-R特性特性 2.3 将将E-R模式转换为表模式转换为表 2.4 E-R模型设计实例模型设计实例 2.5 UML模型模型 2.6 XML 习题习题 第2章 数据模型数据模型(Data Model)是数据特征的抽象,是数据库结构的基础和核心。按不同的应用层次可将数据模型分成3种类型:概念数据模型、逻辑数据模型和物理数据模型。概念数据模型(简称概念模型,Conceptual Data Model)是从现实世界的角度来描述数据的模型。它反映了数据的概念化结构,例如,E-R模型、面向对象模型、XML等
2、。逻辑数据模型(简称逻辑模型,Logical Data Model)是从数据库实现的角度来描述数据的模型。它是具体的DBMS所支持的数据模型,常见的逻辑模型有网状模型、层次模型和关系模型等。物理数据模型(简称物理模型,Physical Data Model)是从计算机的角度来表示数据的模型。它描述了数据在储存介质上的组织结构。概念模型与具体的数第2章 数据模型据管理系统无关,它使得数据库设计人员在设计初期,集中精力分析数据以及数据之间的联系,而不需考虑计算机系统及DBMS的具体技术问题。逻辑模型既要面向用户,又要面向系统,主要用于数据库管理系统(DBMS)的实现。概念模型必须先转换成逻辑模型,
3、才能在DBMS中实现。物理模型与具体的DBMS和操作系统、硬件都有关系。每一种逻辑数据模型在实现时都与其对应的物理数据模型相关。DBMS为了保证其独立性与可移植性,大部分物理数据模型的实现工作由系统自动完成。本章重点介绍常见的概念模型,如实体关联模型、扩展的E-R模型、面向对象模型(UML)及XML模型。第2章 数据模型2.1 实体实体关联模型关联模型实体关联模型(E-R模型,Entity-Relationship Model)是由P.P.Chen在1976年首先提出的。E-R模型的基本思想是现实世界由一组实体和实体之间的相互联系组成,而实体通过其具有的特性进行描述。基于此,E-R模型提供了不
4、受任何DBMS约束的实体、属性和联系的表示方法,即描述现实世界中数据的概念模型。E-R模型在数据库设计中被广泛用作数据建模的工具。E-R数据模型问世至今,已经历了许多修改和扩充。为了更好地理解相关知识,在下文中,用建立连锁超市经营管理系统为例来解释相关概念。该系统的需求描述如下:在一家具有多个加盟门店的连锁超市中,每个加盟门店有一名店第2章 数据模型长管理,一个营业员只能担任一个门店的店长,多名营业员负责一个加盟店的经营,一个营业员只能在一家加盟门店工作。一种商品可在不同加盟门店内销售,一个加盟门店也可销售多种商品。加盟门店里的营业员可销售店中的所有商品。整个连锁超市建立了3家仓库用来存放商品
5、。所有加盟门店都能从这3家仓库进货。超市有企业代码、名称、法人代表、地址及联系电话等描述信息,每个加盟门店都有门店编号、名称、店长、地址、开业日期、联系电话等描述信息,每个营业员都有工号、姓名、身份证号、联系电话、家庭住址、出生年月、工作年月等描述信息,每件商品都有商品代码、商品名称、生产商、生产日期、进货价格、现有数量、销售价格等描述信息,仓库具有仓库编号、仓库名称、面积大小、地址、联系电话等描述信息。第2章 数据模型2.1.1 实体、属性关联实体、属性关联E-R模型的基本构成成分是实体、属性和关联。1实体实体实体(Entity)是现实中存在且可相互区别、又可以被识别的事、物、概念等。实体可
6、以是具体的,也可以是抽象的,可以是物理上存在的,也可以是概念性的。例如,一种商品、一个营业员、一次销售活动等等。实体的特征是可以互相区别。实体可以分为独立实体和从属实体或弱实体。独立实体是不依赖于其他实体和关联而可以独立存在的实体。例如,在我们的例子中,“商品”、“加盟店”、“营业员”、“仓库”等都是独立实体,独立实体通常简称为实体;从属实体是指那些依赖于其他实体和关联的存在而存在的实体。例如,“销售记录”是从属实体,它的存在依赖于实体“商品”和关联“销售”。第2章 数据模型2属性属性实体是通过一组属性(Attribute)来表示的,属性用以描述实体具有的性质。实体的每个属性都有一个值,每一个
7、属性的取值范围就称做该属性的域。例如,“门店”这一实体具有“编号”、“名称”、“店长”、“地址”、“开业日期”及“联系电话”等属性,对于门店(“001”,“中山北路门店”,“中山北路11号”,“2009年1月5日”),其“编号”属性的值为“001”,“名称”属性的值为“中山北路门店”,依此类推。另外,所有合法的编号组成了“编号”属性的域。当然,属性可以是单值的,也可以是多值的,例如“姓名”、“年龄”等都是单值的,而“奖惩情况”则是多值的。另外,需要理解下列与属性相关的几个概念。第2章 数据模型(1)超码(Super Key):在一个实体集中,能唯一标识实体的属性集。例如,“编号”和“名称”可唯
8、一标识一家门店,因此,编号,名称即为实体集“加盟门店”的超码。(2)候选码(Candidate Key):如果一个实体集的某个属性集能唯一标识一个实体,且该属性集又不含子集可以唯一标识一个实体,那么这个属性集就是该实体集的候选码。例如,编号就是实体集“加盟门店”的候选码,工号和身份证号都是实体集“营业员”的候选码。(3)主码(Primary Key):指在当前系统中使用的候选码。例如,工号和身份证号都是实体集“营业员”的候选码,但是在的超市经营管理中只使用工号来标识营业员,那么工号就是营业员这个实体集的主码。第2章 数据模型3关联关联现实世界中的实体之间可能存在各种关系。例如,“超市”与“门店
9、”之间有“管理”的关系、“商品”与“营业员”之间有“销售”的关系。这种实体和实体之间的关系被抽象为关联(Association)。实体间的关联可分3类:一对一(11)、一对多(1N)和 多对多(MN)。(1)一对一(11):给定两个实体集A和B,实体集A中至多有一个实体与实体集B中的某一实体相关联;同样,实体集B中也至多有一个实体与实体集A中某一实体相关联。例如,一名店长只能负责一家门店的管理,一家门店只能由一名店长管理,一所大学只有一名正校长等。第2章 数据模型(2)一对多(1N):给定两个实体集A和B,针对实体集A中某个实体,在实体集B中存在多个实体与其相关联;针对实体集B某个实体,在实体
10、集A中至多有一个实体与其相关联。例如,一家门店具有多个营业员,而一个营业员只能在一家门店上班。(3)多对多(MN):给定两个实体集A和B,针对实体集A中某个实体,在实体集B中存在多个实体与其相关联;同样,针对实体集B某个实体,在实体集A中也有多个实体与其相关联。例如,一种商品可在多家门店销售,一家门店也可销售多种商品。第2章 数据模型2.1.2 实体关联集实体关联集实体集(Entity Set)是指具有相同类型及共享相同性质的实体集合,例如,全部商品就是一个实体集。在我们所用的例子中有超市、门店、营业员、商品、仓库等实体集。关联集是实体集之间的关联,它是由相似的关联组成的集合。例如,商品与营业
11、员之间的关联集是各次销售活动,每次销售活动都反映了一次商品、营业员之间的关联。关联集可以具有用来描述关联的属性,这些属性用来记录关联自身的特性,而不是关联实体的特性。例如,营业员销售某商品,它既不是营业员的属性,也不是商品的属性,因为它依赖于某个特定的营业员,又依赖于某个特定的商品,所以它是营业员与商品之间的关联“销售”的属性。在后面的章节里,可以发现关联集具有属性这一概念对理解数据的语义是非常重要的。第2章 数据模型组成一个关联集的实体集可以相同,也可以不同。有时一个联系可能包含两个同一实体集中的两个实体。例如,店长也是营业员,但同其他营业员之间是上下级关系,这个上下级之间的关联集就包含两个
12、相同的营业员实体集。2.1.3 实体关联图实体关联图我们知道,E-R模型的基本构成成分是实体集、属性和关联集。E-R模型的表现形式称E-R图。在E-R图中,实体集、属性和关联集的表示方法如下:(1)实体集:用矩形框表示,并在矩形框内写上实体名,如图2.1(a)所示。(2)属性:用椭圆框表示,并在框内写上属性名,用无向边与其实体集相连,如图2.1(b)所示。第2章 数据模型图2.1 实体集及其属性的E-R图表示 第2章 数据模型(3)关联集:用菱形框表示,并给关联取以具有适当含义的名字,将名字写在菱形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即11、1M或
13、MN。在连锁超市经营管理系统的例子中,超市、加盟门店、营业员、商品、仓库为实体集;每个加盟门店只有一个店长,而一个店长只能在一家加盟门店任职,所以加盟门店和店长之间是一对一的关联,如图2.2(a)所示;一家超市有多个加盟门店,而一个加盟门店仅属于一家超市,所以超市与加盟门店之间是一对多的关联,如图2.2(b)所示;一种商品可以在多家加盟门店中销售,一家加盟门店也可销售多种商品,因此加盟门店与商品之间是多对多的关联,如图2.2(c)所示。第2章 数据模型图2.2 两个实体集之间关联示例 第2章 数据模型E-R模型除了可以明确表示二个实体集之间11、1M及MN的关联之外。还可表示一些特殊的关联,这
14、些特殊关联有:(1)3个及以上的实体集之间的关联。例如,一家加盟门店可以从同一仓库调入多种商品,也可从多个不同仓库中调入同一商品,某一仓库的同种商品也可供应给多个不同加盟门店。加盟门店、商品和仓库3个实体集之间的联系是多对多的三元联系,其E-R模型表示如图2.3(a)所示。(2)一个实体集内部的关联。例如,每个加盟门店的营业员这个实体集中,一名店长领导多名营业员,店长和营业员之间是一对多的关联,其E-R模型如图2.3(b)所示。(3)两个实体集之间的多种关联。例如,加盟门店和商品之间可以有多种关联,一种关联是一种商品可以由多个加盟门店供应,另一种关联是一个加盟店调入多种商品,其E-R模型如图2
15、.3(c)所示。第2章 数据模型图2.3 多实体集间的特殊关联 第2章 数据模型2.2 扩展的扩展的E-R特性特性对大多数数据库而言,基本的E-R模型可以满足概念建模模型,但对基本E-R模型进行一些特殊扩展才能更好地描述数据库某些方面的特征。这些E-R扩展特性包括特殊化与一般化、属性继承、一般化约束以及聚集等等。2.2.1 特殊化特殊化实体集中可能包含一些子集,这些子集的实体具有与实体集中其他实体不同的一些特征。就商品实体集来说,可以对其做进一步分类,如食品、家电等。每类商品都可以通过商品实体集的所有属性和附加的特殊属性来描述。例如,食品实体集通过保质期属性进一步描述,而家电实体集通过保修期属
16、性进第2章 数据模型一步描述。这种在实体集内部进行分组的过程称为特殊化(Specialization)。实体集可以根据多个差异特征来进行特殊化。在商品这个例子中,是根据实体间的差异来对商品进行分类的。除此之外,还可以根据商品的生产性质不同而进行特殊化,其结果是可能产生了国产商品、进口商品和合资商品实体集。当一个实体集进行了多次特殊化之后,某个特定的实体就可能同时属于多个特殊化实体集。例如,某个给定的商品既是家电,又是进口商品。在数据库的概念设计阶段多次使用特殊化可以简化设计的模式。第2章 数据模型2.2.2 一般化一般化与特殊化相反,一般化(Generalization)是指从一组实体集中抽取
17、共同特征,形成一个新实体集的过程。例如,超市出售的食品、家电、日用品可一般化为“商品”。可见,在一般化中忽略了各个实体集之间的差别,只关注它们的共性。一般化描述了“是一种(IS-A)”的关系。不难发现,食品、家电和日用品都是商品的一种。2.2.3 属性与继承属性与继承在数据库概念建模中,有时会发现一个实体集中的所有实体同时也是另一个实体集中的实体。例如,超市出售的所有食品都是商品。这种情况下,称前一实体集为子类,后一实体集第2章 数据模型为超类。再如,在营业员实体集中,店长也是营业员,但他同时又领导着其他营业员,可增设店长和普通营业员两个实体类型作为营业员的子类。子类的一个很重要的特征是继承性
18、(Inheritance)。继承性使得子类具有超类的所有属性。除此之外,子类还具有自身特有的特征。例如,超市出售的食品具有商品的所有属性,同时还有自己特有的属性“保质期”。不难看出,一组实体集进行一般化后可得到新的实体集,是该组实体集的超类;某个类通过特殊化后可以形成各个子类。也就是说,通过一般化和特殊化可形成类层次。第2章 数据模型2.2.4 一般化一般化/特殊化约束特殊化约束一般化的结构中可以指定两类约束:重叠约束(Overlapping Constraint)和覆盖约束(Overriding Constraint)。重叠约束决定了是否允许两个子类含有相同实体。例如,不能把某个商品既认为是
19、食品类商品的实体又认为是家电类商品的实体;但是可以说某种商品是家电类商品的实体又是进口类商品的实体。这时,把家电类商品和进口类商品称作是重叠的。一般情况下,如果没有进行专门说明,认为实体集之间不存在重叠约束。覆盖约束决定了超类实体是否完全包含在子类实体集中。例如,一个营业员实体要么是店长实体,要么是一个普通营业第2章 数据模型员实体。这时,称店长实体集和普通营业员实体集与营业员实体集之间存在覆盖关系。事实上,在绝大多数情况下没有覆盖约束。例如,由于存在一些无法明确归类的商品,也就是说,商品每个实体不一定属于它的一个子类。在没有进行明确说明时,默认实体集之间不存在覆盖关系。2.2.5 聚集聚集聚
20、集(Aggregation)是一种特殊的关联,它定义了某一实体集的组成成分,抽象了实体和成分之间的“组成部分(is-part-of)”的语义,即表示实体内部类型和成分之间的关联是整体与部分的关系。可以通过聚集形成实体间的一个关联实体,例如,“一个营业员在某个时间销售了某个数量的某种商品”,这个例子中有4个属性:营业员、商品、时间、数量,它们之间的聚集就构成了“销售”关联。第2章 数据模型2.2.6 扩展的扩展的E-R符号符号在基本E-R图中,对实体、属性、关联3个组成部门进行了图形化表达。为了图形化表达扩展概念,需要对E-R符号进行扩展。1依赖关系依赖关系E-R符号符号依赖关系(Depende
21、ncy)用来描述一个实体集间的强依赖关系,即一个实体的存在以另一个实体的存在为前提。通常把依赖实体称为弱实体,被依赖实体称为强实体。例如,在超市经营管理的例子中,一个店长实体是依赖于一个加盟门店的,如果加盟门店不存在了,店长也就不存在了。这里,店长是弱实体,而加盟门店是强实体。在E-R图中,弱实体采用双线框表示,并以此来表达依赖关系,如图2.4(a)所示。第2章 数据模型2一般化一般化/特殊化特殊化E-R符号符号实体集间的一般化/特殊化约束是用来描述“IS-A”关系的。在E-R图中,可以通过一个两旁双线矩形表示弱实体,用中间带有圆圈的连线表示一般化/特殊化关联,如图2.4(b)所示。3聚集聚集
22、E-R符号符号根据其概念可知,聚集用来表示属性与实体之间有整体与部分之间的关系。图2.4(c)所示是一个简单的聚集,实体集“商品”的各个属性都是原子的,图2.4(d)所示是一个复杂的聚集,“加盟门店”这个实体集的属性中有“店长”这个属性,而店长却是一个实体类型。第2章 数据模型图2.4 扩展的E-R模型符号 第2章 数据模型2.3 将将E-R模式转换为表模式转换为表E-R模型是概念模型,建立E-R模型的目的是为了方便数据库逻辑模型的设计。下面,以E-R模型转换成关系模型为例来说明如何将E-R模型表示的概念模型转换成数据库能实现的逻辑模型。关系模型的基本结构是表,而E-R模型是由实体、属性和关联
23、3个基本成分组成的。因此,如何用表来表达E-R模型中的实体集与实体集之间的关联,以及如何确定表的属性和主码,是将E-R模型转换成关系模型时需要解决的问题。第2章 数据模型2.3.1 用表表示实体集用表表示实体集针对E-R图的每个实体集,都转换成一个表。实体集的属性就是关系的属性,实体的主码就是关系的主码。连锁超市经营管理对应的E-R模型中(如图2.5所示),有超市、加盟门店、营业员、商品和仓库等实体集,将它们都转换成对应的表(如表2.1所示)。每个表格中有下划线的属性为该表的主码。第2章 数据模型图2.5 连锁超市经营管理E-R 第2章 数据模型表表2.1 连锁超市经营管理连锁超市经营管理E-
24、R模型的实体集转换成的表模型的实体集转换成的表 第2章 数据模型2.3.2 用表表示关联集用表表示关联集在关系模型中,表与表的关联也用表来表示。在将E-R模型中关联集转换为表时,有如下几种不同情况:(1)对于11的关联,既可以转换成一个独立的表,也可以与任一端的实体集合并。如果转换成一个表,则与该关联相连的各实体集的主码及关联本身属性,构成了表的属性,表的主码由来自关联两端实体的主码组合或其他能唯一标识该表中元组的属性集组成。如果与关联一端实体集对应的表合并,则需要将另一端表的主码和关联本身属性加入到该表的属性中,表的主码不变。第2章 数据模型(2)对于1M的关联,既可以转换成一个独立的表,也
25、可以与M端实体集对应的表合并。如果转换成一个独立的表,则与该关联相连的各实体集的主码及关联本身属性,构成了表的属性,表的主码由来自关联两端实体集的主码组合或其他能唯一标识该表中元组的属性集组成。如果与关联M端实体集对应的表合并,则需要将1端表的主码和关联本身属性加入到该表的属性中,表的主码仍然为M端的主码。(3)对于MN的关联需要转换成一个独立的表。与关联相连的各个实体集的主码及关联本身的属性构成了表的属性。表的主码为来自各个实体集的主码组合或其他能唯一标识该表中元组的属性集。第2章 数据模型(4)对于多个(3个及3个以上)实体集间的1M的关联可以转换成一个独立表。表的属性由与关联相连的各个实
26、体集的主码和关联本身属性构成。表的主码为来自各个关联表的主码组合或其他能唯一标识该表中元组的属性集。对于超市和加盟门店的隶属关联集,加盟门店与营业员的工作关联集是1M关联,这两个关联都有本身的属性,即隶属关联集有“加盟日期”属性,而工作关联集有“开始上班日期”属性,因此,为了方便维护,将其转换成一个独立的表。其他关联集均是MN的关联,因此,都转换成一个独立的表。所有关联集转换成的表如表2.2所示。第2章 数据模型表表2.2 关联转换成表关联转换成表 第2章 数据模型2.3.3 用表表示一般化用表表示一般化对于E-R模型中的一般化关联,在关系模型中也要转换成表。将一般化关联转换为表,有两种常用方
27、法:第一种方法是将超类实体集和各个子类实体都转换成不同的表。超类表的属性集只由本身的属性组成,而子类表的属性除子类实体集的属性之外,还包括超类表的主码。在存放数据对象时,将超类中的属性值存放在超类表中,在子类表中存放该数据对象在超类表中的主码和子类中的属性值。例如,表2.3所示是利用这种方法将图2.4(b)描述的一般化/特殊化关联转换成的表。第2章 数据模型表表2.3 用第一种方法将一般化转换为表用第一种方法将一般化转换为表 第2章 数据模型注意,利用这种方法转换一般化得到的表,在删除超类表的数据对象时,则也删除子类表中该数据对象的数据。第二种方法是只将各个子类实体集转换成表,而超类实体集不转
28、化成表。子类表的属性由超类实体集的属性及子类实体集本身属性共同组成。利用这种转换方法,图2.4(b)描述的一般化关联可转换成表2.4所示的表。第2章 数据模型表表2.4 用第二种方法将一般化转换为表用第二种方法将一般化转换为表 第2章 数据模型用第一种方法转换得到的表,在查询时需要将超类表与子类表进行联接才能得到某类商品的全部信息。当超类表和子类表中的元组数大时,会影响查询效率。用第二种方法转换得到的表存储实体时,只需在对应的子类表中产生一个元组,从查询效率上讲由于不需要进行联接操作,因此效率比较高,但也存在一个问题,如果有某个实体无法划分到某个子类时,就难以存放在某个子类中了。例如,店长首先
29、是普通营业员,然后才是店长。如果按第二种方法生成两个表店长和普通营业员,并只将店长信息放入店长表时,要查询某个加盟门店的所有营业员,店长很容易漏检。相比较而言,在用表表示一般化关联时,通常使用第一方法进行转换。第2章 数据模型2.3.4 用表表示聚集用表表示聚集同样,聚集也可用表来表示。聚集转换一般就是将实体集转换成表。复杂聚集将每个实体集转换成一个表,其中作为整体的实体集所转换的表的属性由该实体集自己的原子属性和作为部分的实体集的主码组成。例如,图2.4(d)所示的复杂聚集关联,可转换成表2.5所示的表。第2章 数据模型表表2.5 用表表示聚集用表表示聚集 第2章 数据模型2.4 E-R模型
30、设计实例模型设计实例通过上面的介绍,我们知道了E-R模型的主要组成成分、表示形式及如何将E-R模型转换成关系模型。接下来以连锁超市经营管理为例来说明创建E-R模型的步骤。第一步,确定实体集。通过分析,可以发现在连锁超市经营管理中有超市、加盟门店、营业员、商品、仓库5个实体集。第二步,确定实体集之间的关联集。超市和加盟门店之间存在1M关联,相应的关联集定义为隶属关联;加盟门店和营业员之间存在1M关联,相应的关联集定义为工作关联;加盟门店和商品之间存在MN关联,相应的关联集定义为供应关联;营业员和商品之间存在MN关联,相应的关联集定第2章 数据模型义为销售关联;商品和仓库之间存在MN关联,相应的关
31、联集定义为存储关联;加盟门店、商品和仓库三者之间存在MN关联,相应的关联集定义为调入关联。第三步,给实体集和关联集加上属性,并标识主码。超市实体集的属性有企业代码、名称、法人代表、地址及联系电话,主码为企业代码。加盟门店实体集的属性有门店编号、名称、店长、地址、开业日期、联系电话,主码为门店编号。营业员实体集的属性有工号、姓名、联系电话、家庭住址、出生年月、工作年月,主码为工号。商品实体集的属性有商品代码、商品名称、生产商、生产日期、进货价格、现有数量、销售价格,主码为商品代码。仓库实体集的属性有仓库编号、仓库名称、面积大小、地址、联系电话,主码为仓库编号。第2章 数据模型每个关联集的属性,除
32、了具有关联实体集的主码之外,还包括其他一些属性。例如,供应关联集的属性中还有供应数量。销售关联集的属性还有销售日期和销售数量。存储关联集的属性还有存储数量、存储位置。调入关联集的属性还有调入数量和调入日期。第四步,把实体集和关联集用E-R图表示。图2.5所示是连锁超市经营管理的E-R图,图中各关联集的属性中省略了各个关联实体集的主码。E-R图建立完毕,接着是将E-R图转换成对应的关系,即用表来表示实体集及实体集之前的各种联系。第2章 数据模型2.5 UML模型模型统一建模语言(UML,Unified Modeling Language)是面向对象技术领域内占主导地位的标准建模语言,它在软件设计
33、中产生的所有结构都以图表方式绘制出来。相比E-R模型来说,UML模型包含了更广泛的软件设计过程:(1)业务建模:描述软件系统要处理的业务过程。(2)需求建模:对业务模型的理解有利于确定软件系统的需求,包括数据库需求。(3)数据库概念建模:对数据库进行概念建模,UML提供与E-R模型结构相对应的内容。第2章 数据模型(4)数据库物理建模:UML也为数据库的物理建模提供了图形化的表示,例如,生成表空间和索引等。(5)软件系统硬件配置建模:UML图表可以用于描述软件系统所使用的硬件配置。2.5.1 UML基本元素基本元素UML的基本元素是图表符号,主要由下列5类,共9种图形来定义:第一类是用例图,用
34、于描述响应用户请求的系统行为,以及在该行为中涉及的人,即从用户角度描述系统功能,并指出各功能的操作者。用例图描述的是期望系统所支持的外部功能。第2章 数据模型第二类是静态图,包括类图(对象图)和包图两种。其中类图描述系统中类的静态结构。不仅定义系统中的类,表示类之间的联系如关联、依赖、聚合等,也包括类的内部结构(类的属性和操作)。类图描述的是一种静态关系,在系统的整个生命周期都是有效的。对象图是类图的实例,几乎使用与类图完全相同的标识。两者的不同点在于对象图显示类的多个对象实例,而不是实际的类。一个对象图是类图的一个实例。由于对象存在生命周期,因此对象图只能在系统某一时间段存在。包由包或类组成
35、,表示包与包之间的关系。包图用于描述系统的分层结构。第2章 数据模型第三类是行为图,包括状态图和活动图两种,用来描述系统的动态模型和组成对象间的交互关系。其中状态图描述类的对象所有可能的状态以及事件发生时状态的转移条件。通常,状态图是对类图的补充。在实用上并不需要为所有的类画状态图,仅为那些有多个状态其行为受外界环境的影响并且发生改变的类画状态图。而活动图描述满足用例图要求所要进行的活动以及活动间的约束关系,有利于识别并行活动。第四类是交互图(Interactive Diagram),包括顺序图和合作图两种,它们描述对象间的交互关系。其中顺序图显示对象之间的动态合作关系,强调对象之间消息发送的
36、顺序,同时,显示对象之间的交互;协作图描述对象间的协作关系,协作图跟顺序图相似,显示对象间的动态合作关系。除显示信息交换外,合作图还显示对象以及它们之间的关系。如果强调时间和顺序,则使用顺序图;如果强调上下级关系,则选择协作图。第2章 数据模型第五类是实现图(Implementation Diagram),包括构件图和配置图两种。其中构件图描述代码部件的物理结构及各部件之间的依赖关系。一个部件可能是一个资源代码部件、一个二进制部件或一个可执行部件。它包含逻辑类或实现类的有关信息。部件图有助于分析和理解部件之间的相互影响程度。配置图定义系统中软硬件的物理体系结构。它可以显示实际的计算机和设备(用
37、节点表示)以及它们之间的连接关系,也可显示连接的类型及部件之间的依赖性。在节点内部,放置可执行部件和对象以显示节点跟可执行软件单元的对应关系。第2章 数据模型从应用的角度看,当采用UML进行系统设计时,首先描述需求;其次根据需求建立系统的静态模型,以构造系统的结构;第三步描述系统的行为。其中在第一步与第二步中所建立的模型都是静态的,包括用例图、类图(包含包)、对象图、组件图和配置图等5个图形,是标准建模语言UML的静态建模机制。第三步中所建立的模型或者可以执行,或者表示执行时的时序状态或交互关系。它包括状态图、活动图、顺序图和合作图等4个图表,是标准建模语言UML的动态建模机制。因此,标准建模
38、语言UML的主要内容也可以归纳为静态建模机制和动态建模机制两大类。第2章 数据模型2.5.2 UML和和E-R模型的关系模型的关系在UML的各种图表中,类图类似于E-R图,但是类图更一般化些,它是用来为应用实体与实体之间的逻辑关系以及数据实体与数据实体之间的关系建立模型的。实体集和关联集,以及主码约束、依赖关系、一般化/特殊化、聚合等都可以在UML中表示为一个类。注意,关联在UML中的含义与在E-R模型中的含义略有不同:在UML中的关联是二元的,而有E-R图中有三元及三元以上的关联集。当然,3个及3个以上实体集之间的关联在UML中也可直接表示。第2章 数据模型在UML中,实体集和关联集等都表示
39、成类,这样,无论几元关联,在UML中都转换成关联类和实体类之间的二元关联。带有外码约束的关联通常会在UML中被忽略,这种关联可直接由相关联的实体类之间的连接来表示。通过将每个类都用一个表来表示,并将每个关联(特别是1M和MN的关联)用表来表示,就可以将一个UML类图转换成一个关系模型。2.5.3 UML设计实例设计实例仍然以连锁超市经营管理为例来说明使用UML进行数据概念设计的过程。这里,只介绍如何生成类图,其他图的生成请参考UML有关教程。第2章 数据模型图2.6所示是与图2.5所示相对应的UML类图表示。从图中不难看出,每个实体集和关联集均表示成一个类,类用一个两段(其实为三段,另外一段表
40、示类的方法,是面向对象设计中的概念,这里将其忽略)矩形表示:第一段是类名,第二段是类属性。关联的表达有多种方法:对于普通关联,用线连接,并在线两端标识关联类型,一对一的关联在线两端标上1(例如,加盟门店与营业员之间的关联)、一对多的关联在线的一端标上1在多端标上*(例如,超市与加盟门店、加盟门店与营业员之间的关联)、多对多的关联在线的两端都标上*(例如,商品与仓库、商品与营业员之间的关联);对于三元实体集之间的关联用一个角向上的正方形表示(例如,仓库、商品、加盟门店之间的关联)。第2章 数据模型图2.6 用UML 类图表达的实体集及实体集之间的关联 第2章 数据模型2.6 XMLXML(eXt
41、ensible Markup Language)即可扩展标记语言,与HTML一样,也是SGML(Standard Generalized Markup Language,标准通用标记语言)。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立,虽然XML比二进制数据要占用更多的空间,但XML极其简单易于掌握和使用。另外,XML还具有跨平台、自描述、依赖于内容的半结构化结构等特征,这使得XML成为当前处理Internet上文档信息的有力工具。XML的简单使其易于在任何应用程序中读写数据,这使得XML成为数据交换中最重要的公共语言。由于XML的跨平台性,从而
42、使得其与Windows、Mac OS、Linux以及其他平台下产生的信息可方便的结合,并可以很容易地将XML数据加载到程序中进行处理,而且处理结果以XML格式输出。第2章 数据模型相对其他数据库而言,XML最初是采用类以树的结构展示数据,而不具备数据库提供的强有力的数据存储和分析能力,例如:数据索引、排序、查询、相关一致性等,因此极其简单。近几年,业界在XML的存储、索引、排序、查询及数据约束等方面已展开了深入研究,并取得了重要成果。2.6.1 XML数据结构数据结构XML以树形结构来描述数据,文档信息从树的根部开始,扩展到树的叶子。下面是一个描述商品信息的XML文档,以图2.7所示的食品类商
43、品XML文档(文件名为food.xml)为例来说明XML的数据结构。第2章 数据模型图2.7 食品类商品XML文档实例 第2章 数据模型经过分析发现,一个XML有一个节点,其他所有节点都在起始标记和终止标记之间。例如,在图2.7的XML中,所有商品信息都包含在和之间,这个节点,就是该XML树的根节点。其他结点都属于中间节点。某个中间节点的后代节点就是包含在该节点起始标记和终止标记之间的节点,例如,开始节点和终止节点之间的所有节点,包括商品名称、价格、生产商、生产日期和保质期都是其后代节点。而各个节点的具体值构成了树的叶子节点,如商品名称“中粮大米”,“中国中粮集团”,“五年”等等。图2.8所示
44、是图2.7所示的XML文档对应的XML树。第2章 数据模型图2.8 食品类商品XML树结构 第2章 数据模型2.6.2 XML文档格式文档格式XML文档包括声明、元素、属性、处理指令、注释及命名空间几部分。下面对这几部分的作用及如何表达进行解释:(1)XML声明。一个XML文档一般以一个XML声明作为开始,XML声明在XML文档中是可选内容,可加可不加,推荐加入一行声明。一个XML声明包含version、encoding和standalone三个属性。version指明以下文档遵循哪个版本的XML规范;encoding 指示文档中字符使用的编码标准;standalone表明该XML文档是否和一
45、个外部文档配套使用。在图2.7所示的XML实例的首行可以看到这样一行“”,它表明此XML的版本号是1.0,采用的编码是ISO 8859-1。第2章 数据模型(2)XML元素。元素是XML文件的基本组成部分,它组成了XML文档的大部分内容。XML允许创建自己的元素集。一个良构的(well-formed)XML文档必须至少包含一个元素,也就是必须有树元素。每个元素都是用标记标识的一小段数据,标记包括了元素的名字和属性。起始标记的形式为,终止标记的形式为。元素的后代位于起始标记和终止标记之间。如果一个元素没有后代,则称为空元素,用来表示。在图2.7中,根元素是,元素和是其孩子元素,而元素有5个子元素
46、,也有5个子元素。XML元素的名称是区分大小写的。它必须以字母或下划线(_)开始,后面可跟任意长度的字母、数字、句点(.)、连接符(-)、下划线或冒号。第2章 数据模型(3)XML元素的属性。这部分用于为元素指定属性,是另一种用来对元素进行说明或附加说明的方式。一般说来,应该将要存储的大量数据放置于元素的内容中,将元素不同的特性数据以及那些不一定需要显示的资料放置在元素的属性中。元素的属性在元素的起始标识中给出,形式为:属性名=属性值。属性名与元素名有相同的构造规则,而属性值必须出现在单引号或双引号中。例如,在图2.7所示的XML文档实例中,元素表示商品名称元素有一个名称为商品代码的属性,其值
47、为“10001”。一个元素可以有任意数目的不同名属性。第2章 数据模型(4)XML处理指令。处理指令通常用来为处理XML文档的应用程序提供信息,这些信息包括如何处理文档,如何显示文档等。处理指令可以作为元素的后代出现,也可以作为文档的顶层结构出现在根元素的前面或后面。处理指令由两部分组成:处理指令的目标或名称、数据或信息,表达格式为,目标的构造规则与元素名的构造规则一样。例如,处理指令:。(5)XML注释。在XML文档中可以添加注释来说明文档内容。XML的注释可以作为元素的后代出现,也可以作为文档的项层结构出现在根元素的前面或后面。注释分别用字符序列“”终止,中间为注释内容。第2章 数据模型(
48、6)命名空间。XML文档可以创建自定义的元素和属性词汇来描述数据。当XML文档较为复杂或是需要从别的地方取得内容时,一个文档中有可能会需要不止一个词汇,这样就会产生名称相同而含义不同的元素出现在不同词汇中的情况。命名空间可以指明哪个元素属于哪个词汇。它可以为每个词汇指定唯一的前缀进行识别,再将该前缀应用于XML文档中的元素上。例如,table 这个词有两个意思:桌子和表格,如果在一个XML的标记中同时需要用到table的这两个含义,而不加区别直接使用就会出错,这种情况叫做“命名冲突”。可以通过用两个不同含义的命名空间来解决命名冲突,在图2.9所示的XML中的table加上了两个不同前缀和,并且
49、说明了来自“http:/www.w3.org/TR/html4/”,而来自“http:/ 数据模型图2.9 XML命名空间应用实例 第2章 数据模型2.6.3 查询与转换查询与转换XML注重数据关系的表达,它不包含任何显示格式的信息,因而对数据表现上并没有HTML直观。XML直观表达是通过XSL(eXtensible Stylesheet Language,可扩展样式语言)实现,XSL是将XML中的数值用指定的显示格式输出。XSL 包含两个部分:一部分是XPath,它是XML文档中导航的语言,用于查询XML文档指定路径中的数据对象;另一部分是XSLT(XSL Transformation),用
50、于转换XML文档。下面通过XSL文档结构来说明这两部分的作用和关系。第2章 数据模型1声明部分声明部分任何XSL文档的第一行实际上都是XML声明:XSL 与 XML 遵循相同的语法规则。在XML声明之后,就是XSL声明,例如:.XSL声明必须有结束标签,上面的声明中还包含命名空间和XSL规范的版本。第2章 数据模型2模板或规则模板或规则 XSL文档由模板或规则构成,每个模板定义应用于特定XML节点的规则。XSL模板如下所示:.模板的作用是承载XML文档中的数据,如同模具一样,如果这个模具是什么形的,那么用这个模具做出来的模型也一定是什么形的,而XML文档中的数据就是用来充实模具的原料。实际上,