3.5 數據建模概念
如果軟件需求包括建立和擴展需求,或者具有數據庫接口,或者必須構建和操作復雜的數據結構,軟件團隊可以選擇建立一個數據模型作為需求建模的一部分。軟件工程師需要定義在系統內處理的所有數據對象,數據對象之間的關聯,以及其他與此相關的信息。實體關系圖(ERD)描述了這些問題并提供在一個應用項目中輸入、存儲、轉換和產生的所有數據對象。
3.5.1 數據對象
數據對象是必須由軟件理解的復合信息表示。所謂復合信息,是指具有若干不同的特征或屬性的事物。因此,“寬度”(單個的值)不是有效的數據對象,但是“維度”(包括寬度、高度和深度)可以被定義為一個對象。
數據對象可能是外部實體(如產生或使用信息的任何東西)、事物(如報告或顯示)、偶發事件(如電話呼叫)或事件(如警報)、角色(如銷售人員)、組織單位(如財務部)、地點(如倉庫)或結構(如文件)。例如,一個人或一部車可以被認為是數據對象,在某種意義上它們可以用一組屬性來定義。數據對象描述包括了數據對象及其所有屬性。
數據對象只封裝數據(沒有對數據的操作),因此,數據可以表示為如圖3-11所示的一張表,表頭反映了對象的屬性。在這個例子中,汽車是通過生產商(Make)、車型(Model)、標識號(ID#)、車體類型(Body type)、顏色(Color)和車主(Owner)定義的。該表的主體表示了數據對象的特定實例。例如,Chevy Corvette牌的車是數據對象“汽車”的一個實例。
圖3-11 數據對象的表格表示
3.5.2 數據屬性
數據屬性定義了數據對象的性質,可以用來:①為數據對象的實例命名;②描述這個實例;③建立對另一個表中的另一個實例的引用。另外,必須把一個或多個屬性定義為標識符。也就是說,當要找到數據對象的一個實例時,標識符屬性成為一個“鍵”。在某些情況下,標識符的值是唯一的,但不是必需的。在數據對象“汽車”的例子中,標識號是一個合理的標識符。
通過對問題環境的理解,可以恰當地確定特定數據對象的一組屬性?!捌嚒钡膶傩钥梢杂糜谄囘\輸部門的應用系統,而汽車制造公司需要制造中的控制軟件。在后一種情況下,“汽車”的屬性可能也包括標識號、車體類型和顏色,但為了使汽車在制造的控制環境下成為一個有用的對象,必須增加許多其他屬性(如內部代碼、驅動系統類型、車內包裝設計師和傳動類型等)。
3.5.3 關系
數據對象可以以多種方式與另一個數據對象連接??紤]一下兩個數據對象:person和car。這些對象可以使用如圖3-12a所示的簡單標記表示。在person和car之間可以建立聯系,因為這兩個對象之間是相關的。必須理解在將要構建的軟件環境中人(在這里是指車主)和車的角色??梢杂靡唤M“對象/關系對”來定義相互的關系,例如:擁有車的人和汽車投保人。關系“擁有”和“駕車投保”定義了person和car之間的相關連接。圖3-12b以圖形方式說明了這些對象/關系對,圖中標注的箭頭提供了關聯方向信息,它通常可以減少歧義或誤解。
圖3-12 數據對象之間的關聯關系
a)數據對象之間的基本連接 b)數據對象之間的關系