在 The Data Model Resource Book: Volume 3 [1] 中,除了 Recursive Pattern 外,另一個非常實用的 Pattern 就是本篇要介紹的 Classification Pattern。
【問題描述】
在系統分析時,我們常會收集到很多用來描述Entity 的屬性,有些屬性有助於我們未來對這個Entity 做分類/分組/分群,有些分類還可以再細分成多個子類別(有階層性,如:生物分類[2]最耳熟能詳的界/門/綱/目/科/屬/種)。有時候同一個Entity也會同時符合多個分類,如:最近剛推出預告的尚氣與十環傳奇這部電影可能同時是漫威宇宙、超級英雄、漫畫改編、動作等分類。
【問題分析】
我們需要一個 [ Entity Category Type ] 來紀錄這個Entity 要用哪些維度來分類。如,我們要對出版品做分類,可能可以依出版者國籍、出版品的風格、出版品的媒體... 等。
而分類的結果則是在 [ Entity Category ] 如:依出版品的媒體可能是:紙本、光碟、線上...; 依出版品的風格可能是:文藝、動作、科幻、紀錄...
接下來則是 [ Entity Category Classification ] 則是紀錄了 [ Entity ] 與 [ Entity Category ] 之間的多對多的配對關係。
【Pattern 套用】
仍以出版品為例,套用 Pattern 後的資料如圖二。直接將圖一中的Entity 全部改成 Publication 就完成了,是不是很簡單?
【舉一反三】
在很多系統可能都會有貼標籤的功能,像客戶關係管理系統就會需要依不同的方式來分類客戶,如:地區別、客戶行業別...,標籤也可能有階層關係,一個客戶同時也會貼多個標籤。(圖三)
Customer Category Type: 決定有哪些類別的標籤
Customer Category: 依上述類別產出的標籤
Customer Category Classification: 每個客戶貼上各自的標籤
【學以致用】
在知識管理系統裡,每份知識也可以分屬於多個由不同維度組成的分類樹,是否也可以套用這個Classification Pattern呢?不妨自己試著套用看看~
【業配】
本篇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/%E7%94%9F%E7%89%A9%E5%88%86%E9%A1%9E%E6%B3%95