選單
GSS 技術部落格
在這個園地裡我們將從技術、專案管理、客戶對談面和大家分享我們多年的經驗,希望大家不管是喜歡或是有意見,都可以回饋給我們,讓我們有機會和大家對話並一起成長!
若有任何問題請來信:gss_crm@gss.com.tw
2 分鐘閱讀時間 (491 個字)

[Data Modeling] Recursive Pattern

scarbor-siu-r6Swev4tiBI-unsplash

開發人員常聽到 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


圖二、Recursive Pattern

【Pattern 套用】

將 Pattern 中的 Entity 全部閉著眼睛用 Organization 取代,就可以產出下圖,是不是很方便?

我們把圖一的組織樹放進這個 Model, 驗證這個Model是否可行。

圖三、Organization Structure Model

【舉一反三】

真的那麼好用?那我們把前面提到的行政區也放進來試試。

看來好像也沒有問題,是不是很簡單。

圖四、行政區

Recursive Pattern 不只能處理【相同方向連續一對多關係】,還可以延伸到 Peer to Peer (同儕) 以及 Aggregation (聚合) 關係。

Peer-to-Peer: 只要是紀錄Entity自己和自己的關係時,就可以派上用場,如:球賽是球隊和球隊的競賽關係(圖五),人際關係是人和人的關係(圖六)、車票的價目表是站與站的票價與車距關係(圖七)... 

(在Peer-to-Peer 的情況下,就不一定需要 Entity Type,以下三個Model都剛好不需要)

圖五、賽程表
圖六、人際關係
圖七、票價與行車時間


【學以致用】

看完以上介紹,是不是躍躍欲試?以下兩個題目可以拿來試看看~歡迎把您的答案貼上來討論

  1. 五行:彼此有相生相剋的關係
    • 五行相生:木生火,火生土,土生金,金生水,水生木。
    • 五行相剋:木剋土,土剋水,水剋火,火剋金,金剋木。
  2. 農民曆上的食物相剋關係

【業配】

本篇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

[.Net Core] 服務存留期 (Service Lifetime)
你的 HTTPS 連線安全嗎? - 設定篇

相關文章

 

評論

尚無評論
已經注冊了? 這裡登入
Guest
2024/05/17, 週五

Captcha 圖像