開發人員常聽到 Design Pattern, 事實上 Data modeling 也是有 Pattern 可以套的。好的Pattern可以節省Modeling的時間,也可以保留未來系統的彈性。
本篇將介紹 The Data Model Resource Book: Volume 3 [1] 的 Recursive Model
【問題描述】
公司之前的組織比較扁平,最小單位是部門,再上去是事業處。但隨著組織的發展,事業處裡可能有副處長,介於部門和事業處之間;接著在事業處上面又多了一層事業群的層級,組織樹的變化也就更多了。如下圖,有所謂的長短腳組織,如果組織的設計是開一個Table 紀錄 部門、事業處、事業群的對照表,顯然就會無法應付這樣的變化,就很容易因此而需要調整Table的設計、功能也要跟著調整,牽一髮而動全身。
【問題分析】
觀察像組織架構圖的結構有一個特性,每個Node彼此間是相同方向連續一對多關係,常見的如:行政區[2](省/直轄市、縣/市/區、鄉/鎮/市...)、製造業的BOM(Bill Of Material)表... 等。就可以帶入書中 [1] 所提到的 Recursive Pattern
【Pattern 套用】
將 Pattern 中的 Entity 全部閉著眼睛用 Organization 取代,就可以產出下圖,是不是很方便?
我們把圖一的組織樹放進這個 Model, 驗證這個Model是否可行。
【舉一反三】
真的那麼好用?那我們把前面提到的行政區也放進來試試。
看來好像也沒有問題,是不是很簡單。
Recursive Pattern 不只能處理【相同方向連續一對多關係】,還可以延伸到 Peer to Peer (同儕) 以及 Aggregation (聚合) 關係。
Peer-to-Peer: 只要是紀錄Entity自己和自己的關係時,就可以派上用場,如:球賽是球隊和球隊的競賽關係(圖五),人際關係是人和人的關係(圖六)、車票的價目表是站與站的票價與車距關係(圖七)...
(在Peer-to-Peer 的情況下,就不一定需要 Entity Type,以下三個Model都剛好不需要)
【學以致用】
看完以上介紹,是不是躍躍欲試?以下兩個題目可以拿來試看看~歡迎把您的答案貼上來討論
【業配】
本篇Data Model 使用 Sparx Enterprise Architect 製作
【參考來源】
[1]. Paul Agnew(2009). The Data Model Resource Book: Volume 3: Universal Patterns for Data Modeling, Len Silverston
[2]. https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E8%A1%8C%E6%94%BF%E5%8D%80%E5%8A%83