?

          ?????????最近逛書店發(fā)現(xiàn)一本數(shù)據(jù)建模的好書——《數(shù)據(jù)建模:分析與設(shè)計的工具和技巧》(Data Modeler's Workbench:Tools and Techniques for Analysis and Design),作者Steve Hoberman。粗讀完一遍后,感覺這本書的確無愧于譯者和國外專家們的盛贊:“這本書充滿了對改進數(shù)據(jù)模型和設(shè)計有益的技術(shù)和技巧,并且它還極富閱讀樂趣——一個了不起的結(jié)合!任何一個數(shù)據(jù)建模者都應(yīng)該擁有一本Steve Hoberman的關(guān)于數(shù)據(jù)建模工具和技術(shù)的書?!?/p>

            盡管我對自己所掌握的數(shù)據(jù)建模知識有一定的自負,讀完該書后,還是獲益良多。本著好書大家一起分享的想法,我把該書的每個章節(jié)的總結(jié)和技巧建議列出來,以方便手頭暫時沒有該書的朋友在數(shù)據(jù)建模時參考。該書所介紹的工具和模版可在作者的Web站點下載,地址是:
            www.wiley.com/compbooks/hoberman

            第一章:使用趣聞、類比和演示文稿來闡明數(shù)據(jù)建模的概念

            在一般的日常溝通中。我們可能會說出并聽到許多故事、或者趣聞這些故事涉及的論題范圍很大。有些例子是周末發(fā)生在我們自己身邊的事情,或者是與我們的工作項目有關(guān)的經(jīng)歷。這些趣聞有助于加強我們和周圍人們的關(guān)系,增進我們的愉悅情緒,而且對我們有教育作用。我們能夠把由語言表達出來的東西形象化。有時,當(dāng)故事結(jié)束時,給我們留下的是以前未曾想到的信息或更多的認(rèn)識。在解釋數(shù)據(jù)建模概念時,趣聞是極其有效的。原因有如下幾個:
            它們建立起持久的形象。
            它們引人入勝、使人愉悅。
            它們增經(jīng)人們之間的關(guān)系。
            它們減緩壓力。

            成功編造并講述一個數(shù)據(jù)建模方面的趣聞有下面三個簡單的步驟:
            1)定義一個論題。要在心中保證,你講述的這個趣聞有一個特定的目標(biāo)或論題,也就是說,這個故事是為了解釋一個數(shù)據(jù)建模的概念或術(shù)語。
            2)選擇你的故事。我們可以選擇的故事類型多種多樣。我們要考慮選擇一個有趣并有益,而且能夠明白無誤地傳達主題意圖的簡短的故事。
            3)演練你的故事。一旦找到了合適的故事,你要好好演練一番,直到你自信它能夠在兩分鐘的時間內(nèi)充分表達你的論題。要避免講述拖拖拉拉的故事。

            數(shù)據(jù)模型類比
            類比就是把兩個或多個概念進行相互比較,以強調(diào)它們之間的相似或差異。類比是介紹外來事物或新鮮事物的一個很好的技巧,尤其是向非計算機專業(yè)的人士介紹計算機的專業(yè)知識時。Hoberman在數(shù)據(jù)建模中最常見的幾個類比如下(他用這些類比輕松的打動管理層給他漲了一倍的工資^_^):
            主體域模型是一個居高臨下的視點。
            數(shù)據(jù)模型是一個設(shè)計圖。
            企業(yè)模型是一個世界地圖。
            標(biāo)準(zhǔn)就是城市規(guī)劃。
            元數(shù)據(jù)倉儲庫是一個圖書館。
            數(shù)據(jù)倉庫是“心臟”。

            第二章:元數(shù)據(jù)賓果游戲
            簡單來說,即通過賓果卡片游戲的方式,調(diào)動項目團隊成員的積極性,來確定數(shù)據(jù)模型,并確定元數(shù)據(jù)的有效性。元數(shù)據(jù)賓果游戲強調(diào)“共贏”,如果運氣好,游戲結(jié)束時每個人都能贏。

            第三章:確保高質(zhì)量的定義
            本章集中討論一個被稱為“定義檢查單”(Definition Checklist)的工具,它包含了確保定義的質(zhì)量處于最高水平的準(zhǔn)則。

            第四章:數(shù)據(jù)建模者的項目計劃
            本章重點介紹確定數(shù)據(jù)建模階段、任務(wù)、工具和時限的四個工具:
            ·數(shù)據(jù)建模階段的工具:用來確定最高層次上的數(shù)據(jù)建模步驟。
            ·階段—任務(wù)—工具:提取出“數(shù)據(jù)建模階段”的各個階段并把他們分解成數(shù)據(jù)建模任務(wù)。
            ·優(yōu)先級三角形:你可以從以下三項中取兩項極值:很高的質(zhì)量、最短的時間與最低的成本,但你永遠也別想三者兼得。
            ·可靠的估算工具:“主體域工作量時限”根據(jù)應(yīng)用程序的類型,確定每個數(shù)據(jù)建模階段應(yīng)占整個項目的百分比?!叭蝿?wù)工作量工具”提取在“階段—任務(wù)—工具”中確定的每項任務(wù),并列出它們應(yīng)占整個數(shù)據(jù)建模工作產(chǎn)品的百分比。這兩個工具的組合可使你向項目經(jīng)理提供一份具有一定精確度的合理估算。

            第五章:主體域分析
            本章主要探討五個關(guān)鍵的工具,這五個工具對數(shù)據(jù)建模工作的主體域分析階段有幫組作用。它們應(yīng)該按照下面的順序被逐個完成:
            1)主體域檢查單:新應(yīng)用程序中的主體域的完整列表,還有各個主體域的定義和同義詞(或別名)。
            2)主體域CRUD(Create Read Update Delete)矩陣:包含新應(yīng)用程序和現(xiàn)有應(yīng)用程序之間的主體域方面的差別和重復(fù)之處,確定應(yīng)用程序的范圍。
            3)In-the-Know模版:確定完成這個新應(yīng)用程序的數(shù)據(jù)間模工作產(chǎn)品所需要的、被用作資源的人員和文檔。
            4)主體域家族樹:包含每一個主體域的源應(yīng)用程序和若干其他的關(guān)鍵信息,闡明主體域數(shù)據(jù)將來自哪里。
            5)主體域力度矩陣:使用一個電子表格的格式,記錄每一個度量和事實主體域的發(fā)布層次。

            第六章:主體域建模
            本章闡述三個隊主體域信息進行建模的強大工具:
            ·“業(yè)務(wù)清理板”模型。
            ·“應(yīng)用程序清理板”模型。
            ·“早期現(xiàn)實性檢查”模型。

            第七章:邏輯數(shù)據(jù)分析
            本章關(guān)注四個邏輯數(shù)據(jù)分析工具,它們應(yīng)該按照下面的次序被使用:
            1)數(shù)據(jù)元素家族樹:包含應(yīng)用程序的數(shù)據(jù)元素的完整列表,以及每個數(shù)據(jù)元素的來源和變換信息,還有其他幾個關(guān)鍵的數(shù)據(jù)元素元數(shù)據(jù)。
            2)數(shù)據(jù)元素粒度矩陣:用一個電子表格的格式,來記錄每個度量和事實的發(fā)布層次。
            3)數(shù)據(jù)質(zhì)量記錄模板:展示每個數(shù)據(jù)元素的員數(shù)據(jù)和一些實際數(shù)據(jù)的對比。
            4)數(shù)據(jù)質(zhì)量確認(rèn)模板:記錄每個數(shù)據(jù)元素的元數(shù)據(jù)和一些實際數(shù)據(jù)的對比的結(jié)果。

            第八章:規(guī)范化之旅和反向規(guī)范化生存指南(強烈推薦:是我目前所讀過最好的關(guān)系型數(shù)據(jù)庫的規(guī)范化技術(shù)文檔)
            規(guī)范化是一個剔除冗余并應(yīng)用規(guī)則的過程,它的目的是為了更好的理解和表達存在于數(shù)據(jù)元素之間的依賴性和參與性。規(guī)范化包含6個層次,最高層是第五范式(5NF)。一般的技術(shù)文檔上都認(rèn)為達到3NF即可,Steve Hoberman給我們指明了更高的目標(biāo):5NF。Graeme Simsion寫過一本名為《Data Modeling Essentials》的書,在這本書中,他寫道:“較高層次的范式常被從業(yè)者誤解并因此而被忽視,或為了支持不可靠的建模時間而被引用?!钡?,我們需要理解這些較高層次的規(guī)范化,因為它們體現(xiàn)了額外的規(guī)范化機會,并幫組我們進一步減少冗余信息、改進設(shè)計的靈活性。盡管余下的三個規(guī)范化層次有可能僅僅產(chǎn)生次數(shù)很少的變化,但它們?nèi)匀痪哂幸恍┨岣哽`活性和效率的機會。下面是BCNF&4NF&5NF的定義(比國內(nèi)教材上羅列的數(shù)學(xué)公式容易理解得多^_^):
            BCNF=3NF+下面的規(guī)則:
            每一個數(shù)據(jù)元素都完全依賴于鍵、整個鍵,而且除依賴于這個鍵以外,不依賴于任何其他數(shù)據(jù)元素。
            4NF=3NF+下面的規(guī)則:
            要把主鍵中擁有三個或更多外建數(shù)據(jù)元素、切割格外鍵之間不存在約束的那些實體分解成兩個或更多個實體。
            5NF=4NF+下面的規(guī)則:
            把主鍵中擁有三個或更多的外鍵數(shù)據(jù)元素,且這些外鍵數(shù)據(jù)元素之間存在著約束的實體分解成為所有的約束都需要的多對多的關(guān)系。

            當(dāng)我們攀上5NF的頂峰后,再根據(jù)實際需求情況來進行“反向規(guī)范化”增加數(shù)據(jù)冗余,從而簡化開發(fā),提高查詢速度。反向規(guī)范化是這樣一個過程:在定義了一個可靠的、完全規(guī)范化了的數(shù)據(jù)結(jié)構(gòu)之后,你借助這個過程,有選擇地引入一些重復(fù)的數(shù)據(jù),以促進特殊性能需求的實現(xiàn)。Steve Hoberman的“反向規(guī)范化生存指南”給如何適當(dāng)增加冗余提供了一套可計算的評分標(biāo)準(zhǔn)。通過考察每個關(guān)系的6個問題,累加各個問題的得分之后,當(dāng)?shù)梅执笥诘扔?0時,我們將對該關(guān)系進行反向規(guī)范化。

            “反向規(guī)范化生存指南”的計分規(guī)則:
            1.關(guān)系是什么類型的:該問題確定我們所分析的關(guān)系的類型。父實體對于子實體具有什么樣的關(guān)系?
            層次關(guān)系(20分)
            同等關(guān)系(-10分)
            確定關(guān)系(-20分)
            2.參與率是多少:該問題確定一個關(guān)系中的每個實體的參與性。換句話說,對于一個給定的父實體數(shù)值,大概會有幾個子實體數(shù)值?父與子的關(guān)系越接近“一對一”,我們對它進行反向規(guī)范化的機會就越大。
            多達“一對五”的比率(20分)
            多達“一對一百”的比率(-10分)
            超過“一對一百”的比率(-20分)
            3.父實體中有多少個數(shù)據(jù)元素
            少于10個數(shù)據(jù)元素(20分)
            數(shù)據(jù)元素的數(shù)量介于10到20之間(-10分)
            多于20個數(shù)據(jù)元素(-20分)
            4.使用率是多少:當(dāng)用戶需要來自子的信息時,通常情況下,它們是否還需要來自父的信息呢?換句話說,這兩個實體的耦合或相關(guān)程度如何?
            相互之間的關(guān)聯(lián)很強(30分)
            相互之間的關(guān)聯(lián)較弱或者沒有關(guān)聯(lián)(-30分)
            5.父實體時一個占位符嗎:在不遠的將來,我們是否還打算向父實體加入更多的數(shù)據(jù)元素或關(guān)系?如果答案是“不”,那么進行反向規(guī)范化的可行性就更強。
            是(20分)
            不(-20分)
            6.變動對比率是多少:該問題是為了確定,在同一時間周期內(nèi),兩個實體的插入和更新的頻度是否相近。如果其中一個實體很少變化,而另一個實體卻變動頻繁,那么,我們就非常傾向于保持它們的規(guī)范化狀態(tài),把它們放在各自的表中。
            相同(20分)
            不同(-20分)

            “反向規(guī)范化生存指南”的使用方法:
            1)把模型中的關(guān)系按照優(yōu)先級排序
            2)選擇一個關(guān)系
            3)對這個關(guān)系回答提問
            4)如果得分等于或大于10,就進行反向規(guī)范化
            5)返回步驟二,直到完成所有的關(guān)系。

            第九章:抽象化安全指南和組件
            看過我的“淺談數(shù)據(jù)庫設(shè)計技巧(上) ”的朋友應(yīng)該還記得我舉的第二個例子:網(wǎng)上電子商務(wù)平臺上的商品信息表的設(shè)計。本章將我在上面例子中所用的方法上升到了理論階段,采用了面向?qū)ο蟮脑O(shè)計,將所有商品的共有屬性提取出來,抽象成一個超類,再加入一個表來記錄各個不同實體之間的細節(jié)來實現(xiàn)超類的派生,從而實現(xiàn)設(shè)計的靈活性。當(dāng)出現(xiàn)下面兩種條件的任何場合,抽象化都是極其有用的:
            設(shè)計需要永久維持下去:要求以后盡可能的不修改數(shù)據(jù)庫設(shè)計
            需求可能發(fā)生變化:應(yīng)用程序的需求發(fā)生變化,而要求業(yè)務(wù)流程重組或進行功能升級
            數(shù)據(jù)倉庫:當(dāng)新的分類類型從源應(yīng)用程序中傳過來時,我們無須對數(shù)據(jù)倉庫的設(shè)計進行任何改動,而只需在分類類型實體加入一個新行即可
            元數(shù)據(jù)倉儲庫:和數(shù)據(jù)倉庫的要求類似

            當(dāng)然,抽象化會大大增加工作量和開發(fā)的復(fù)雜度,而人們通常關(guān)注的是非常短期的應(yīng)用和眼前的成本,而不關(guān)心將來的高得多的成本。所以,我非常贊同敏捷軟件開發(fā)這個觀點:在最初幾乎不進行預(yù)先設(shè)計,但是一旦需求發(fā)生變化,此時作為一名追求卓越的程序員,應(yīng)該從頭審查整個架構(gòu)設(shè)計,在此次修改中設(shè)計出能夠滿足日后類似修改的系統(tǒng)架構(gòu)。

            “抽象組件”就是小型的抽象模型片段,在許多的建模場合(無論是什么行業(yè)、組織,甚至什么主體域的建模場合)中,它們都可被反復(fù)使用。在鍵模階段多次使用抽象化之后,你將開始看到出現(xiàn)的抽象化結(jié)構(gòu)的趨勢。這些“抽象組件”有如下的目的:
            加快設(shè)計速度
            加快開發(fā)速度
            提供通用且有用的機構(gòu)

            第十章:數(shù)據(jù)模型美化技巧
            本章通過關(guān)注如何改進邏輯和物理數(shù)據(jù)模型的視覺外觀,使我們的設(shè)計超越直接的應(yīng)用程序需求。本章中討論了五個類別的美化技巧:
            邏輯數(shù)據(jù)元素排列技巧:這些技巧是一個推薦的、對你的邏輯數(shù)據(jù)模型中的每一個實體的數(shù)據(jù)元素進行排序的方法。
            物理數(shù)據(jù)元素排序技巧:這些技巧關(guān)注數(shù)據(jù)模型中每一個實體的最佳布局。
            實體布局技巧:這些技巧關(guān)注數(shù)據(jù)模型中的每一個實體的最佳布局
            關(guān)系布局技巧:這些技巧關(guān)注如何調(diào)整重疊的關(guān)系線條以及看起來穿越(而不是繞過)無關(guān)實體的關(guān)系
            吸引注意力的技巧:這些技巧關(guān)注如何在我們的涉及中突出的某些元素、實體或關(guān)系。

            第十一章:規(guī)劃一個長盛不衰的數(shù)據(jù)建模生涯
            對數(shù)據(jù)建模者的十大忠告清單:
            1)記住:靈活性、準(zhǔn)確性和背景
            2)建模只是你的工作的一小部分
            3)嘗試其他角色
            4)了解95/5規(guī)則:95%的時間將花費在5%的數(shù)據(jù)元素上
            5)數(shù)據(jù)建模從不令人厭煩:如果你一直在做數(shù)據(jù)建模工作,而且發(fā)現(xiàn)自己經(jīng)常感到厭煩,那么,你的確該改變一下了。這可能不是數(shù)據(jù)建模領(lǐng)域本身令人厭煩,而是你所在的特定的任務(wù)、公司或行業(yè)不再令人興奮。冒險一下,嘗試著道一個不同的項目或行業(yè)中進行數(shù)據(jù)建模工作吧!
            6)站在技術(shù)前沿
            7)盡量不要在模型上牽扯感情因素:建模者必須理解,人們在評審過程中的意見并不是針對模型的創(chuàng)建者,而是針對這個模型的內(nèi)容。即那句老話:對事不對人。
            8)讓你的創(chuàng)造力展開翅膀:在考慮記錄數(shù)據(jù)需求和改進設(shè)計的新方法時,要緊可能有創(chuàng)造性。有創(chuàng)造性也許就意味著修改本書中的某些工具。這還可能意味著提出你自己的電子表格或其他工具。
            9)單純的理論太昂貴了:在設(shè)計活動過程中,你要確保把這個觀點牢記在心。為這個應(yīng)用程序掏腰包的部門和組織期望看到的是能看得著的實用結(jié)果。
            10)成為一個了不起的會講故事的人:作為一名數(shù)據(jù)建模者,講故事是工作的一個很重要的部分。為了幫組教化和影響項目經(jīng)理以及對我們行業(yè)缺乏理解的其他人,我們需要講故事或趣聞。

            最后,我個人覺得,Steve Hoberman所提出的“抽象組件”的觀念和面向?qū)ο笤O(shè)計中的的“設(shè)計模式”非常類似。即數(shù)據(jù)庫專家在多次的數(shù)據(jù)建模后,將各個項目中的類似部分抽象化,提取出特定的建模模型片段,以后只需在新的項目中對這些模型片段細化派生,即可快速構(gòu)建出適合于該項目的數(shù)據(jù)庫架構(gòu)。不過,這些建模模型片段并沒有統(tǒng)一,形成標(biāo)準(zhǔn),目前也沒有出版這類的書籍。本人正在陸續(xù)總結(jié)自己在這方面的經(jīng)驗,但是自知水平有限,不敢在高人面前班門弄斧,只希望自己日后陸續(xù)發(fā)布的相關(guān)文章能起到拋轉(zhuǎn)引玉的作用,爭取由中國的程序員率先統(tǒng)一出數(shù)據(jù)建模領(lǐng)域的“設(shè)計模式”。

          posts - 41, comments - 7, trackbacks - 0, articles - 0

          Copyright © weibogao

          主站蜘蛛池模板: 澄迈县| 揭西县| 达州市| 灯塔市| 洪雅县| 永寿县| 谷城县| 容城县| 宁乡县| 沙雅县| 进贤县| 乐业县| 阿瓦提县| 漳州市| 芒康县| 绥江县| 昌吉市| 金平| 巴青县| 河源市| 郴州市| 垦利县| 芜湖县| 瓦房店市| 泊头市| 清河县| 类乌齐县| 全州县| 宣化县| 吴川市| 原平市| 双流县| 双鸭山市| 黔南| 开封县| 合阳县| 神池县| 新沂市| 揭东县| 曲水县| 江孜县|