簡介
作為構造軟件的基本框架,軟件結構應該與需要分析時建立的分析模型保持一致。一種非 常有效的設計思路是,基於需求分析中的數據流模型進行軟件結構映射,由此產生出軟件系統 的基本設計模型。 為了方便從數據流模型中映射出軟件結構來,需要對數據流進行合理的分類。例如,將數 據流分為變換流或事務流,然后按照它們各自不同的特點分別采取不同的映射方法。
變換流分析與設計
變換流
變換數據流所體現出的是數據從輸入到加工再到輸出的一般步驟。變換數據流對數據的加 工流程如下圖 所示,這就是數據首先需要經過輸入過程,將外部數據形態轉變為適合進行加 工處理的內部形態;然后經過變換中心,將已轉成內部形態的輸入數據加工成一種新的數據形 態;接着再經過輸出過程,將經過加工產生的新的數據結果轉換成適合向外導出的數據形態。

高層框架
由於變換數據流將整個過程分割成了輸入、變換和輸出三個部分,因此,對軟件結構的映 射也就可以是在總控模塊之下,將軟件分為輸入、變換、輸出三個部分。為了減輕總控模塊的 控制負擔,可以針對這三個部分,分別設置控制模塊,由此獲得對各個區段的有效控制。
下圖是基於變換流的高層框架圖。

下層模塊
當軟件結構的高層框架被確定下來以后,接着需要考慮的是那些涉及具體操作的下級模 塊。為了確定下級模塊,並能夠按照一定規則 將這些下級模塊掛接到上面的框架上去,有必要對變換數據流進行分段研究。
(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)數據完整性
為了使數據庫中的數據更加便於維護,還需要在數據庫中建立數據完整性規則,包括實體 完整性和參照完整性。 實體完整性是指數據庫對數據表中記錄的惟一性約束。為了使數據表具有實體完整性,需 要在數據表中設置主鍵,由此可確保數據表中的每一條記錄都是惟一的,也就是說不會出現重 復記錄。 數據庫參照完整性則是指建有關聯的數據表之間存在的“主表”對“從表”的一致性約束。由此可使從表中外鍵字段的取值能夠受到主表中主鍵字段取值的限制。例如,只有當主表的主 鍵字段中存在該值后,從表的外鍵字段才能取用該值;並可使得當主表中主鍵字段值更改時, 從表中對應的外鍵字段值可以自動同步更新,或使得當主表中有記錄刪除時,從表中外鍵字段 值和主表中主鍵字段值相同的相關記錄也被一同刪除。
