必知必會的數據建模思想,都在這了
導讀:在不熟悉軟件開發的業務人員看來,軟件似乎是一種很神秘的事物。因為對軟件不熟悉,這些人對軟件的看法往往容易走入兩個極端:要么認為軟件很簡單,要么認為軟件是萬能的。如果再加上軟件開發或數字化從業人員不懂或不熟悉業務,業務與IT之間的鴻溝就會越來越寬、越來越深。在筆者看來,身處數字化時代,大家都應該懂數字化,懂一些軟件的工作機理。
如果用一個簡單的數學公式來看軟件,我們可以將軟件理解為:
軟件=數據+程序+界面
數據指的是我們如何去描述現實中的事物,比如事物叫什么名字、有多重、有多高、什么材質、什么顏色等。用軟件的術語講,就是對象、對象的屬性和屬性值。程序就是一段用于操作對象或對象屬性的計算機代碼,這些操作包括創建、刪除、修改、查詢、計算等。界面指的是人與軟件的交互界面,包括界面布局、菜單、按鈕、選擇框、文本框等要素。
從軟件設計和開發的過程來看,軟件的設計和開發與汽車或其他機電產品的設計和開發工作基本是類似的,要有好的架構,也要考慮功能、交期、成本、質量等管理要求。實際上,軟件開發的入門不難,難的是開發出功能復雜、操作簡便和性能可靠的軟件,這就取決于當事人的軟件設計和建模,包括數據建模、流程建模、界面建模等。此處以數據建模為例,談談設計和建模思想對軟件的影響。軟件工程對數據建模的總體要求是完整性、無冗余、復用性、穩定性、開放性、集成性、優雅性和可讀性。
1)完整性。數據建模的完整性要求對象和對象屬性的定義等數據,應該能夠滿足所有的業務需求,不能有任何遺漏。
2)無冗余。數據建模的無冗余,指的是數據庫表和表的字段不能出現重復,應該只有一張“臉”,而不是數出多孔,否則就很難保證數據的一致性,也將造成邏輯的混亂和存儲空間的浪費。
3)復用性。復用性是模塊化思想在數據建模的體現,指的是數據定義可以用于多種業務和多個場景。
4)穩定性。穩定性比較好理解,指的是數據庫表在更新或擴充時,原有數據能夠保證穩定,不出錯。
5)開放性。開放性指的是數據表和表字段可以根據業務的變化或擴展做出相應的變化或擴展。
6)集成性。集成性指的是數據表和表字段與其他系統之間的數據交互和集成。
7)優雅性。優雅性指的是數據建模中對象、對象類、類層次等之間的包含與被包含關系清晰、可裝配和可追溯。
8)可讀性。可讀性指的是數據建模的內容,尤其是概念模型能夠被業務和用戶容易地理解。
大體上,軟件的數據建模包括三個步驟:概念建模、邏輯建模和物理建模。
01概念建模
概念建模(Concept Modeling)的主要目的是將業務需求轉換為數據需求,站在軟件的角度將業務需求結構化和系統化。通過概念建模,所有的業務需求都可以歸結到對象(包括對象屬性的定義)與對象之間的關系上。換句話說,通過對象與對象之間的關系,可以描述現實中任意一個事物,以及組織對事物的管理要求。
概念建模是業務需求與軟件開發的橋梁。在保證概念模型中對象、對象屬性、對象之間的關系被完整清晰定義的前提下,概念模型在形式上也可能容易被業務人員所理解,這涉及概念建模的語言和工具的選擇。當前,業內常用的概念數據建模工具有E-R實體與關系模型、UML統一建模語言和OPM對象過程模型。
(1)E-R實體與關系模型
E-R模型以兩類要素—實體(Element)和關系(Relationship)為基本構件,來描述業務需求。其中,實體類似于面向對象編程中的對象,關系類似于面向對象編程中的方法或事件。
如圖1所示,其中的業務對象有合同工、員工、組織單元、崗位和技能,事件則有雇傭、終止、離職、轉崗、晉升、評價等。對象之間還有“被擁有”與“擁有”“管理”“匯報給”等關系類型。
圖1 E-R概念數據建模方法舉例
(2)UML統一建模語言
UML是一種為面向對象系統的產品進行說明、可視化和編制文檔的一種標準語言,在軟件開發工程師之間比較常用。UML中包括功能模型、對象模型和動態模型,由模型元素(Model Element)、圖(Diagram)、視圖(View)、通用機制(General Mechanism)等幾個部分組成。
(3)OPM對象過程建模
相比UML統一建模語言,OPM對象過程建模的方法更簡單,不僅可以用于軟件開發領域,也可以用于其他產品的設計和建模。
如果從模型學的角度,世界基本由三種要素構成,即物(Object)、事或過程(Process)和關系(Relationship)。從時間變遷的角度,物是物理或信息上的靜態存在(Existence);過程是一種時間和動作序列化的動態存在(Happening);關系則是物與物之間、過程與過程之間、物與過程之間的相互關聯,可以表現為結構(Structure)或行為(Behavior)。世界或世界的某部分,都可以用這三方面的要素建構或解構。在這種思想的指導下,誕生了很多模型方法論,通用性比較強又相對簡單的是對象關系方法論(Object-Process Methodology,OPM)。
在OPM方法論中,人們(用五官或理性思維)看得見也可言說的關鍵要素只有兩類,即對象(Object)和過程(Process)。關系則只能根據最終結果或輸出來意會,難以言說或書面化,它是現實世界中的“玄”和“玄之又玄”。過程對對象的影響主要有三種:
1)過程消耗或消滅對象,比如制造過程要消耗原材料;
2)過程催生或創造對象,比如制造過程產生副產品或產成品;
3)過程改變對象的狀態,比如制造過程將所使用的設備設置為“忙”的狀態。
在制造過程中,人、機、料(含原材料、在制品和產成品)和環是對象,法和測是過程。此外,對象還可能是過程的操作者(Operator),過程由對象觸發或控制;對象還可能為過程提供支持(Instrument),過程的推進依賴某些工具或設備。
用OPM的方法描繪的通用制造系統模型如圖2.9所示。
圖2.9 用OPM描述的通用制造系統模型
由圖2.9的模型圖,可以得出以下結論:
1)制造系統的核心作用是轉化,即將能源、人力、原材料等資源轉化為產品;
2)制造系統的運行過程中還會產生一定的無價值副產品,比如排放、返工、等待、工料費等;
3)制造系統的改進方向是減少資源消耗,杜絕無價值副產品,增加價值產品的產出;
4)制造系統的改進路徑是優化對象與對象之間、對象與過程之間、過程與過程之間的關系,即結構和行為。
(4)對象、類和類的層次
選擇什么樣的建模語言或工具,主要取決于當事人的偏好,選用任何一種建模工具都不能保證數據建模的高質量,還要在數據模型中的對象、類,以及類的層次上下功夫,考驗的是當事人的哲學思維和架構能力。下面以業內知名的物聯網平臺—PTC ThingWorx數據建模為例,來談談其中所蘊含的數據建模思想。
應用軟件是解決方案的“母體”,PaaS平臺是應用軟件的“母體”。
從業務需求到解決方案,從解決方案到應用軟件,從應用軟件到PaaS平臺,抽象化越來越高,通用性越來越強。平臺之所以稱為平臺,就是因為它是高度抽象化、模型化的架構式軟件系統,它能衍生出千千萬萬的“子孫”—應用軟件。
PaaS平臺是模型和架構思維在IT行業的具體實例,其模型化、架構化的程度越高,平臺的生命力就越強。在PTC ThingWorx平臺中,基本架構要素如圖2所示,主要有七個:Thing Shape、Thing Template、Thing、屬性、服務、事件和訂閱。
圖2 PTC ThingWorx平臺中的架構要素
Thing是物聯網中對象的統稱,可以代表智能設備、資產、產品、IT系統、人員、流程等。簡而言之,在物聯網世界中,萬事萬物都是Thing。
Thing Shape和Thing Template是Thing的類,是在Thing之上更高層面的模塊化。Thing可以繼承Thing Shape和Thing Template的各種屬性和方法。一個Thing需要分配一個Thing Template,也可同時分配一個或多個Thing Shape。
Thing Shape可以理解為迷你型Thing Template。Thing Shape可以分配給Thing Template,反之則不行。分配給Thing Template或Thing的Thing Shape可以為一個或多個,而分配給Thing Template或Thing的Thing Template則只能為一個。
屬性、服務、事件、訂閱等用于描述物聯網中各種Thing的特性和方法。屬性、服務、事件和訂閱可以分配給Thing Shape和Thing Template,然后再間接繼承到相關的Thing,也可以直接將其分配給Thing。
屬性是對Thing的描述,可以是靜態的,也可以是動態的。
服務是由一段代碼所構成的方法或功能,以幫助Thing完成某個特定的活動。
事件是觸發器,用于觸發Thing的狀態變化,也可以驅動某個業務邏輯或活動。
訂閱是伴隨著事件的活動,可用于業務的優化或自動化。
根據業務需求,應用PTC ThingWorx平臺進行業務建模,基本遵循以下過程(如圖3所示):
圖3 PTC ThingWorx中的數據建模過程
1)業務需求的準確性、完整性記錄和澄清;
2)將業務需求分解成相對獨立的用戶故事;
3)將用戶故事的內容拆分成業務對象(實例,Instance)和對象之間的關系(Relationship);
4)將關系的內容和性質進一步拆分成屬性、服務、事件和訂閱;
5)將第4步中的屬性、服務、事件、訂閱等進行歸納和分類;
6)根據第5步的分類,定義必要的Template或Shape,并將所有的屬性、服務、事件、訂閱等分配給Template或Shape;
7)將第3步實例清單中的實例與第6步的Template或Shape進行關聯;
8)用Template、Shape、Thing、屬性、服務、事件、訂閱等要素,以相互之間的分配與繼承關系完整地描繪第2步的所有用戶故事。
利用ThingWorx對物聯網業務場景進行建模,就是從特殊到一般、從個體到模型的過程,其中的關鍵是實例與實例之間關系的整理和結構化。將關系拆分成不可分割的屬性、服務、事件或訂閱,然后再合并同類項,最終完成從關系到屬性和方法、從屬性和方法到模型化的過程。
02邏輯建模
邏輯建模(Logical Modeling)是將概念建模的內容進行數據結構化。在邏輯建模中,對象、對象屬性等要素用數據庫表和表字段來表示,包括創建多少數據庫表,每一個數據庫表有哪些列(字段)、主鍵和外鍵,每一列的標識、名稱、數據類型、長度和業務規則,等等。
03物理建模
物理建模(Physical Modeling)是將邏輯建模的內容落實到具體的數據管理系統中。這時,數據庫管理系統的選擇還要考慮數據庫性能、訪問控制、存儲空間、硬件要求等。
綜上所述,概念建模、邏輯建模和物理建模是數據建模的三個步驟和主要工作內容。其中,邏輯建模和物理建模純粹是技術活,概念建模則更多地考驗建模者對需求的理解程度,以及將業務需求轉化為數據需求的哲學思辨和架構思維的能力,是決定軟件質量的根本所在。
關于作者,丁少華,字肇之,現任杭州三之一智聯科技有限公司首席顧問。資深數字化專家,擁有20多年的企業信息化和數字化咨詢服務經驗。?