曝光台 注意防骗
网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者
个示意图以不同的形式提供给不同的听众。
步骤2是将你的对象类型组织到类型层次中。
3. 寻找关系
既然已经命名了对象类型,静态信息建模的下一步工作是确定对象类型之间的关系。
我们最好从几个英语句子开始:
• A customer books one or more holidays(一个客户可以预订一个或多个假期)
• Each holiday involves one or more travelers(每个假期包含一个或多个旅游者)
• Each holiday involves zero or more journeys(每个假期包含零个或多个旅行)
• Each holiday involves one or more accommodation-bookings(每个假期包含一个或多个食
宿预订)
• Each accommodation-booking is at one hotel(每个食宿预订是位于一个旅馆的)
这些关系( U M L将之称为关联)可以用示意图来表示(如图4 - 2所示)。我们可以通过多种
不同的表示法描述这些对象关系,每种方法各具特色。在本章中,我们将使用U M L表示法,因
为它已经被I T界广泛接受,虽然我发现有时与用户交流时,最好使用更加自然的方式,例如:
采用比较通俗的方式说明某个关系是一对多的。就我个人而言,我喜欢将示意图做得尽量简单
和直接,将主要精力集中于关键的信息,而将细节
留给文本文档,因为它们比示意图更易于维护。无
论如何,细化到哪种程度比较合适取决于项目本身:
如果你只有三个月的时间建立We b站点,就无法为
数据模型中的所有对象类型构造详细的定义,即使
你通过艰苦的努力完成了,也没有人有时间读它们,
更不用说不断更新了。
对于每种关系,必须掌握以下基本点:
关系中的元组数说明了它能够包含的每种对象
的数目:
• 最常见的是一对多关系:一章可以有多个段
落,一个人可以参加多个假期,一本书可以有
多个版本,一个订单可以包含多个订购项。在
上面的示意图中,我们将大多数一对多关系标
记为一端只有一个对象( 1 . . 1意味着至少一个,
至多一个),另一端可以有0至n个对象。在有
些情况下,使用“ 1 . . n”更有意义;例如:如
果一个旅游胜地没有旅馆,就不能称之为旅游胜地,因此在旅馆一端使用“ 1 . . n”表示。
第4章数据建模与XML使用85 下载
图4-2
客户
假期旅游者
旅行游览
公司旅馆
旅游胜地
• 另外还有多对多关系:一个作者可以写几本书,而且一本书也可以有几个作者。在上面的
示意图中也存在这种关系:几个旅游者可以在同一假期中一起旅游,而且每个旅游者也可
以参加几个假期(企业旅游公司可能要跟踪这种情况)。对于多对多关系,通常要将每一
对作为一个对象来命名:我们将由一个假期和一个旅馆组成的对称为一次游览( v i s i t)。之
所以采用这种方式,是因为它使得你能够有地方放置属于这种关系而不是任何一个对象的
特性,例如:每个游览都有与它相关的日期和房间号。
• 一对一关系不太常见:这种关系的例子有人和工作的关系,一个人在任何时刻只能有一份
工作,工作只能由一个人完成。
在为最终的X M L表示建立信息模型的过程中,有一类关系特别重要——包含关系。它总是
一对多或一对一的。包含关系的确切构成没有一定之规,不过我们可以从英语的句法中得到启
迪:章包含段落;旅游胜地包含旅馆;旅馆包含旅游者。U M L定义了两种形式的包含:聚合
(a g g r e g a t i o n)和构成( c o m p o s i t i o n),聚合是相对松散的对象组合,它使得一组事物能够暂时
被视作一个整体(例如:一个旅行团,某个人可能在不同的时刻属于不同的旅行团);构成是
一种更强的关系,其中的各个组成部分不能独立存在(例如:旅馆中的房间不能独立于旅馆而
单独存在)。在U M L中,聚合关系的聚合端用菱形表示。
我们还可以延伸聚合的概念:一个假期包含几次飞行;一个时间安排包含多个事件;一个
电话服务包含几个产品。但是此时我们需要格外谨慎,因为我们很容易忽略一个事实—这些
关系实际上是多对多的关系,我们有时会将它们误认为是一对多的。例如,许多时间安排能够
包含相同的事件。虽然概念可以扩展,但是最好确保每个对象“仅包含在”另一个对象中:这
与我们对“包含”一词的直观理解相吻合,而且也符合X M L的数据模型,虽然X M L的数据模型
能够表达任意链接,但是它主要用于说明层次型结构。为了明确这一点,每当你在关系图中看
到菱形时,在X M L中应该将它模型化为包含的元素和重复的子元素,因此对于我们的例子,可
以有以下X M L结构:
程序清单4 - 1
86使用XML 高级编程
下载
为关系寻找合适的名称通常是非常棘手的:这可不是英语语言所擅长的。最终你常常会使
用i n c l u d e(包含)、u s e(使用)或h a s(有)等不确定的名称。更糟糕的是,根据你看待关系的
角度,关系一般会有不同的名称。在描述关系时,最好使用完整的短语,例如: hotel is-locatedin
resort(旅馆位于旅游胜地中),person is-an-author-of book(人是书的作者)。幸运的是,我
们不必将关系的名称作为X M L标记:它们仅仅出现在系统文档中。因此,我们无需在示意图中
标明关系的名称。
在第3步的结尾,我们已经定义了模型中对象类型之间现有的关系。
4. 定义特性
对象类型和关系构成了静态信息模型的骨架;特性的作用是在骨架上增加血肉。特性是与
对象相关联的值。一个人有身高、体重、国籍和职业;一个旅馆有若干房间、一个被评定的星
级和一个价目表。
在对象的特性列表中,不需要再次包含关系:如果我们已经建立了旅馆与旅游胜地的关系,
就不必将“位置”作为旅馆的特性。
对于特性,最重要的是数据类型。是否要在固定范围内取值,它是数字吗,它的单位是什
么?它是可选的还是必需的,是否有缺省值?
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:
XML高级编程上(36)