曝光臺 注意防騙
網曝天貓店富美金盛家居專營店坑蒙拐騙欺詐消費者
個示意圖以不同的形式提供給不同的聽眾。
步驟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.k6050.com
航空翻譯 www.aviation.cn
本文鏈接地址:
XML高級編程上(36)