星期一, 9月 18, 2006

資料模型的溝通

必須承認,自己在溝通方面的表現實在很差勁。

早在幾個月前,我就曾談過了一些自己對於「官職表資料模型」的看法(可參考 官職表:行政組織與任職人員官職表的模型問題)。我也曾嘗試與老師、實驗室成員溝通自己的想法,但很可惜地都不怎麼成功。

隨著時間的流逝,慢慢地實驗室終於有人必須面對資料模型的問題。八月底的實驗室會議,學弟被老師罵到臭頭,在我看來也是因為溝通不良的緣故。

溝通本來就不是一件容易的事。但是為什麼連學術殿堂上的專業溝通,都顯得如此吃力呢?我漸漸地認為,一個頗重要的原因,是在於「溝通者所關注的焦點不同,卻使用類似的語彙」。

什麼意思呢?且讓我嘗試用以下的圖來解釋(這裡套用的詞彙,是自己左思右想後,覺得比較合適的。雖然我覺得,應該早就存在類似的圖表來解說 data modeling 的問題,但手頭實在也找不到這樣的資訊,就先誇大地說是自己的發現吧)。


項老師在理論方面(Abstract Model 的部分)非常拿手。在主導 THDL(台灣歷史數位圖書館)計畫多年後,他也明瞭資料建構的困難(人工建置、修訂 metadata 的成本極高)。但麻煩出在,即使有了抽象模型,也建構了適當的基礎資料;但一碰上實作,還是會產生很多系統開發、效能、以及後續維護改進的問題。

學弟挨罵的原因,是因為資料庫儲存地名資訊的每一列,id 都是用 a.b.c.d 這樣的編碼方式,來表示地名間的階層關係。老師認為,將階層關係直接寫在資料庫裡,將會失去資料建構的彈性:如果以後發現在節點 b 與 c 之間,還有一個節點 x,那麼不是整個資料表都需要重新建置嗎?

換句話說,項老師以為,資料表是由 Excel 之類人工建立的表單(contruction model)直接對應產生。因此,「將階層資訊編碼在 id 欄位」,就表示在 Excel 的表單裡,每一列都需要人工建置這樣的階層編碼。

但其實,階層編碼不必然都是由人工所產生的。如果有良好的建構模型,我們可以寫程式(上圖齒輪的部分),在彙整建構模型所提供的資訊時,自動產生這樣的編碼。

此外,實作上用關聯式資料庫來處理階層資訊,有時反而必須在效率上付出代價。因此若階層資訊是靜態的,深度也並不大,直接把階層資訊編碼在欄位裡,或許反而是合宜的處理方式呢。

於是,結果是溝通時大家關心不同的地方,但都用同樣的「模型」一詞(沒有區分各種模型),以致類似「雞同鴨講」了。老師關心資料建構的問題,但學弟只展示系統的運作方式 (application model),以及秀出資料庫的資料表 (implementation model),卻並沒有好好地說明建構的模型(原始資料該用什麼格式儲存有什麼欄位、該如何將這些資訊彙整入資料庫)!

上星期五我花了許多時間,利用上面的圖表,向兩位學弟說明「官職表」與「地名沿革」的資料模型問題。最後,他們表示同意我的想法與觀點。最近對於自己的溝通能力已經沮喪到不行,能夠得到一些正面的回應,還真很令人感到高興呢。

19 則留言:

匿名 提到...

請教學長: 之前有次討論到"設計模型"與"理論模型", 對應到這篇文章中會是什麼呢?

tu 提到...

因為已經忘了當時的情境,我猜「設計模型」應該是指「非抽象模型」的那些模型(application & presentation, implementation, data construction)吧。

那麼,抽象模型與設計模型,又有那些不同呢?或許,一個重要的區隔,是「抽象模型」不見得需要是 discrete & finite。例如,它可能含有不定的時間,而時間理論上是「連續」的。

只是,理論模型終究必須靠設計模型來實作。這時,就必須從天上掉落地面,必須考量現實面的限制了。

匿名 提到...

那時候是討論到一般從OO的角度來處理時, 是缺乏 "理論的模型"

被掛掉的阿尼 提到...

這是為什麼說你露出叫獸嘴臉的原因了, 因為你已經在想項老大在想的了.
項老大在想這個東西的時候, 他想要的是一個穩定的方法論, 從抽象模型到data type這種小事, 以後學生可以一屆一屆的繼續下去, 最後這個東西可以有一些局面.
而學生常常不願意接手學長的東西, 因為學長不見得能幫他什麼, 而且如果學長有些沒做到, 他得補上去還沒有什麼credit. 所以學生傾向於show a new idea, 對他來講, 以後會不會多個中間節點, 並不影響他現在要做的東西, 為什麼項老大要拿這個作文章?
以這件事情來講, tree要encode到table裡, 在dbms裡是非常直接的加一個小associated table, 而在excel裡卻要化上一番工夫. 可是偏偏excel是比較大家能share point的工具. 所以在hl7 組織裡, 大家討論時確實也是用excel, 可是一定會有一個setup spreadsheet來放這一些阿里不達的小associated table, 還有一些vba的幫忙, 可是你的學弟願意去花這些力氣嗎?

匿名 提到...

想了想, 似乎也不是全然無跡可循. 畢竟這裡所處理的世界是the world of data and computation.

對照過去所謂的需求分析, 或從E-R, data flow analysis, 或是OO裡的Use case, Interaction Diagram, Sequence Diagram, etc, 確實都不是以描繪所處理問題的理論模型. 不過這樣做, 或許可以對當下所說得出來的需求達到盡快進入開發的可能, 而對於已知的需求, 大致上也能判斷是否符合completenss & correctness的條件. 但是比較不能確定的像是它的applicability (範圍與限制), 或者想比較某些地方是否夠general等.

看來如何琢磨出理論模型, 是沒有什麼特定的方法. 有些問題或許已經有不錯的理論模型. 至於一般公司所處理的問題, 也有可能有相對的模型存在, 這和是否面對高不確定性也沒有必然的關係. 有時候應該只是能否察覺以及是否認為重要罷了.

匿名 提到...

至於對特定問題如何產生其理論模型, 通常是學術界在處理 (因為這個過程幾乎無法管理, 也難以預期).而好的模型的出現, 也不乏是由 "天才" 來產生的實例.這樣的話, 自然很難在 system engineering, software engineering 之類的領域中看到相關的資訊.

所以, 這不僅僅是看到某種溝通上的gaps; 也看到目前system engineering, software engineering 與 business development / management 中的一些問題.

lcat 提到...

偷偷問一下 Lry,什麼是 HL7 啊?

看來叫獸的有好幾種,有卡通類型,也有蜥蜴類型的 :P

tu 提到...

項老師就是覺得,應該用另一個(或多個)associated table 去儲存節點的關聯,而不該將階層資訊編碼起來啊。(這點當然沒有錯。但在 prototype 階段、甚至最後的實作,也不盡然必得如此做,不是嗎?)

此外,我並沒有刻意去猜測項老師想的(模型或方法論)啊。對我來說,主要的問題是在於溝通。

換個角度說,我覺得溝通(不是談判)時,如果有共通的基本事物,採用共同的語言,並儘量避免語意的含糊性,就應該比較容易達成共識。

看來,還是 LYR 比較有教授的嘴臉 :p

tu 提到...

對喔,什麼是 HL7 啊?

也還是溝通的問題 :p

tu 提到...

嗯,看來 Ankh 對於「理論模型」比較有些感覺...

在我的感覺裡,理論模型跟那些 E-R diagram、Sequance Diagram、Use Case Analysis 的確「很」不一樣。但... 該怎麼陳述、說明它們的差異呢?

lcat 提到...

如果溝通不能很短的時間能達成,就是一個教,一個受,教授叫獸啦!

mph 提到...

嗯,有看沒有懂,我跟叫獸顯然是不同國的。

被掛掉的阿尼 提到...

HL7是一個國際組織, 脫胎於醫院交換資訊的標準, 但一來是領域的延伸, 二來是過去由下往上的定模型最後自己吃苦頭, 這幾年來全力否定自己的過去, 推新的v3, 就是很嚴謹的從基礎模型與方法論開始. 有興趣可以在他們的網站上找到一堆資料www.hl7.org, 台灣當然也有分會, 理事會就是陸哲駒的老闆, 但台灣因為使用不多, 對v3還不太感興趣

匿名 提到...

學長明知我是不懂的.

之所以繼續胡謅, 是覺得這裡面應該是有些具有延伸性的東西. 也許瞎攪和反而可以幫得上忙.

如果模型終歸是種 "simplified representation", 那麼差異就在各自想保留的精華不同, 以及其respresentation的不同.

理論模型或許不在意使用者會以什麼樣的順序來使用 & 以什麼樣的方式來感知這個應用系統中所包含的資料. 但是理論模型或許試圖賦予在這應用系統(所要處理的需求)中 "所有可能的資料"與"相關的計算" 一個"明晰而一致"的詮釋.

匿名 提到...

(以下就扯更遠)

或許它的角色可類比為哲學.
不在意的人沒有它也活得下去.

也許處理有些問題, 是不太需要考慮"理論模型". 也許有些問題若沒有"理論模型", 是做不下去, 也難以溝通.

(亂猜)或許運用上 "AI" 來處理的問題, 特別需要有"理論模型"的支撐.

當然現在就開始猜測 "杜氏溝通模型" 所處理的問題與適用範圍, 應該是太早了.

lcat 提到...

蠻好奇像 Google 的搜尋引擎開發,是否是依照某種理論進行?還是先實作出來,在一步一步修正,並進行理論化的?

先有雞還是先有蛋?呵呵~

被掛掉的阿尼 提到...

google不是一開始先提一個理論, 把網頁間的參考當成cited index用, 但現在發現組織會跑到最前面...
另一回事, 這也是一個我一直在思考的問題, 能不能替文件們自動產生cite, 誰參考誰不重要, 只要知道兩份資料的重覆性. 當然這樣結果會變成一個group, 跟現在的參考的統計不一樣

匿名 提到...

在Google成立的時間應該就已存在幾種IR的模型, Google可能是對其中某一(幾)類去深化. PageRank 應該是對其模型中認為 "match" 的文件再給予 "排序" 的方式(算是模型的一部份?)

我想它們是有一個相對良好的理論模型, 而且也儘可能在implementation上去貼近這個模型(所以才會自己又開發出一堆東西, 不管是compiler, storage, 甚至是hardware).

而模型應該還是得因應新現象修修補補. 像對spam的處理, 假的click(for 廣告機制), 甚至現在背負了某些 "道德責任" 之後(例如不能讓user 從query results中點到phishing 的網站, 或是對色情網站的處理), 應該都會有修補的需要吧.

tu 提到...

我頗贊同 Ankh 的猜測(想法)。

在這類的問題上,先有雞還是先有蛋?很難說,也或許都可以那樣說。可能先有簡單的 prototype,然後有了簡單的模型;也可能先有了簡單的概念模型,然後實作來測試看看。

接下來,模型應該也會隨著時間漸漸演化。但是一個好的模型,因為它已經在核心裡包含「應該最重要的東西」,所以即使是改良、修正模型,影響都不至於「太」嚴重。