在不少企業(yè)的數(shù)據(jù)系統(tǒng)中,可能會遇到這樣的問題:
不同系統(tǒng)里都有個叫“客戶ID”的字段,一個是營銷系統(tǒng)里的潛在客戶編號,一個是CRM里的注冊用戶ID,另一個是訂單系統(tǒng)里的付費客戶主鍵,這些字段名看起來一樣,實際含義卻完全不同,數(shù)據(jù)團隊拉錯字段算錯指標(biāo),分析有誤,業(yè)務(wù)根本無法展開。
這些問題看似是字段管理沒做好,其實背后真正的原因是:沒有建立起統(tǒng)一的數(shù)據(jù)模型,數(shù)據(jù)結(jié)構(gòu)在最開始就沒對齊。
在正文開始前,給大家分享數(shù)據(jù)倉庫和大數(shù)據(jù)平臺建設(shè)解決方案:整合多源業(yè)務(wù)數(shù)據(jù),為企業(yè)提供一站式數(shù)據(jù)倉庫建設(shè)和上層數(shù)據(jù)產(chǎn)品集成應(yīng)用解決方案,構(gòu)建集數(shù)據(jù)集成、報表制作展示、BI數(shù)據(jù)分析于一體的大數(shù)據(jù)平臺。
01 數(shù)據(jù)建模VS數(shù)據(jù)模型
數(shù)據(jù)建模
數(shù)據(jù)建模是將業(yè)務(wù)世界中的對象、行為和規(guī)則,通過結(jié)構(gòu)化方式映射為數(shù)據(jù)模型的過程。簡單來說,數(shù)據(jù)建模就是基于業(yè)務(wù)理解,對數(shù)據(jù)進(jìn)行結(jié)構(gòu)化設(shè)計,讓數(shù)據(jù)變得可讀、可用、可分析。
通過建模,企業(yè)可以明確“有哪些數(shù)據(jù)”“數(shù)據(jù)之間是什么關(guān)系”“哪些是關(guān)鍵指標(biāo)”“業(yè)務(wù)如何通過數(shù)據(jù)來決策”,并最終將這些信息固化為可以落地執(zhí)行的模型結(jié)構(gòu),服務(wù)于查詢、分析與運營等核心場景。
它的目標(biāo)不只是“把數(shù)據(jù)裝進(jìn)數(shù)據(jù)庫”,而是讓數(shù)據(jù)具備業(yè)務(wù)語義,讓使用者能準(zhǔn)確、快速地獲取有價值的信息,及時作出反應(yīng),為企業(yè)創(chuàng)造更高的效益。
數(shù)據(jù)模型
數(shù)據(jù)模型是一種抽象化的表達(dá)方式,用于描述數(shù)據(jù)的結(jié)構(gòu)、數(shù)據(jù)之間的關(guān)系以及相應(yīng)的業(yè)務(wù)規(guī)則。它通過“實體 + 關(guān)系 + 約束”的方式,把業(yè)務(wù)世界中的各種對象(例如客戶、產(chǎn)品、訂單)轉(zhuǎn)換為數(shù)據(jù)系統(tǒng)可識別的結(jié)構(gòu)化表達(dá)。
它不直接存儲數(shù)據(jù),但決定了數(shù)據(jù)該如何組織、如何命名、如何關(guān)聯(lián)。例如你看到的一張星型模型結(jié)構(gòu)圖、一套表結(jié)構(gòu)說明文檔、一個訂單主題域ER圖,都是典型的數(shù)據(jù)模型成果。
可以說數(shù)據(jù)建模是從業(yè)務(wù)理解出發(fā),來制定這些模型的過程。

在數(shù)據(jù)治理實踐中,很多企業(yè)面臨一個共同問題:標(biāo)準(zhǔn)有了,規(guī)范也定了,但數(shù)據(jù)依然“該亂還亂”。字段命名混亂、指標(biāo)口徑不一致、數(shù)據(jù)質(zhì)量難保障,這些現(xiàn)象屢見不鮮。很多時候,企業(yè)投入大量精力梳理命名規(guī)則、指標(biāo)定義和質(zhì)量標(biāo)準(zhǔn),卻發(fā)現(xiàn)真正上線使用時,系統(tǒng)里依舊“一團糟”。
造成這一現(xiàn)象的核心原因在于,這些標(biāo)準(zhǔn)并沒有以結(jié)構(gòu)化的形式進(jìn)入數(shù)據(jù)系統(tǒng),缺乏有效的承載方式。僅靠文檔記錄和口頭協(xié)商,遠(yuǎn)遠(yuǎn)不足以支撐數(shù)據(jù)在全流程中的規(guī)范執(zhí)行。
數(shù)據(jù)建模,正是解決這一問題的關(guān)鍵手段。
通過建模,企業(yè)可以將字段標(biāo)準(zhǔn)、指標(biāo)規(guī)則、質(zhì)量約束等要求,轉(zhuǎn)化為清晰的模型結(jié)構(gòu),固化為表結(jié)構(gòu)、字段定義、數(shù)據(jù)關(guān)系等內(nèi)容。這些模型不僅在開發(fā)階段為數(shù)倉提供了統(tǒng)一的結(jié)構(gòu)指導(dǎo),也在后續(xù)的ETL流程、BI使用、數(shù)據(jù)校驗中持續(xù)發(fā)揮作用。
建模后的數(shù)據(jù)倉庫,不再是簡單的“數(shù)據(jù)搬運”,而是帶有明確業(yè)務(wù)語義和結(jié)構(gòu)邏輯的系統(tǒng)。數(shù)據(jù)字段命名規(guī)范可查、表之間的關(guān)系清晰可溯、指標(biāo)的計算邏輯在建模階段就已沉淀,避免了開發(fā)過程中的主觀判斷與重復(fù)定義。同時,建模還能作為數(shù)據(jù)質(zhì)量校驗的基準(zhǔn),輔助實現(xiàn)自動化的入庫校驗和事后核驗,支撐數(shù)據(jù)治理的閉環(huán)落地。
可以說,數(shù)據(jù)建模是貫穿“標(biāo)準(zhǔn)制定、開發(fā)實現(xiàn)、數(shù)據(jù)使用與質(zhì)量管控”的核心橋梁。沒有建模,數(shù)據(jù)標(biāo)準(zhǔn)就無法嵌入業(yè)務(wù)流程和系統(tǒng)執(zhí)行,數(shù)據(jù)倉庫也很難真正“被使用”起來。
因此,在數(shù)據(jù)倉庫建設(shè)中,建模不僅是第一步,更是決定后續(xù)數(shù)據(jù)能否高效復(fù)用、業(yè)務(wù)是否能夠理解和使用的關(guān)鍵環(huán)節(jié)。
建模階段怎么走?從抽象到落地,通常分為概念建模、邏輯建模、物理建模三個階段:

概念建模:從業(yè)務(wù)出發(fā),識別關(guān)鍵實體(如客戶、產(chǎn)品、訂單)及它們之間的關(guān)系,是數(shù)據(jù)世界的“草圖”。
邏輯建模:在概念模型基礎(chǔ)上,引入字段、主鍵、外鍵、依賴關(guān)系等,更貼近系統(tǒng)語言,但不依賴具體技術(shù)平臺。
物理建模:最終將邏輯結(jié)構(gòu)落地到數(shù)據(jù)庫,設(shè)計表結(jié)構(gòu)、索引與存儲策略,是數(shù)據(jù)系統(tǒng)正式運行的藍(lán)圖。
也有部分大型項目會在最前面增加“業(yè)務(wù)建模”階段,用于整體流程梳理與業(yè)務(wù)主題域劃分,從而構(gòu)建更穩(wěn)的建模起點。
02 數(shù)據(jù)建模的幾種方式
數(shù)據(jù)建模沒有唯一標(biāo)準(zhǔn),不同場景用不同方法適用于不同的業(yè)務(wù)目標(biāo)和技術(shù)背景,看看三種常見的數(shù)據(jù)建模方法:哪種適合你?
范式建模(3NF,全稱 Third Normal Form)來自傳統(tǒng)數(shù)據(jù)庫設(shè)計領(lǐng)域,是一種注重數(shù)據(jù)一致性與結(jié)構(gòu)規(guī)范性的建模方法。在這個體系下,一條數(shù)據(jù)永遠(yuǎn)只出現(xiàn)一次,所有字段必須符合嚴(yán)格的依賴邏輯,不能出現(xiàn)“同名異義”或“多余字段”這種情況。
舉個例子,如果你在構(gòu)建一個用于業(yè)務(wù)記錄和追蹤的系統(tǒng)(比如訂單錄入系統(tǒng)、客戶資料維護平臺),你一定不希望某條訂單信息在多個表里重復(fù)存在,更不希望有一天你發(fā)現(xiàn)某個“客戶名稱”在系統(tǒng)里有三種拼寫。
這時候,范式建模就是你最靠譜的底層設(shè)計方案:它能確保每一份數(shù)據(jù)都來源可追、依賴清晰;幫你維護數(shù)據(jù)質(zhì)量,讓更新、刪除都不牽一發(fā)而動全身;還能避免數(shù)據(jù)冗余,提升系統(tǒng)的穩(wěn)定性與安全性。
所以,范式建模常常被用于構(gòu)建ODS層,以及各種對數(shù)據(jù)一致性要求極高的業(yè)務(wù)記錄系統(tǒng),比如銀行賬務(wù)、醫(yī)療檔案、生產(chǎn)管理等領(lǐng)域。
當(dāng)數(shù)據(jù)結(jié)構(gòu)太規(guī)范、分得太細(xì),一次查詢就得關(guān)聯(lián)七八張表,查詢效率就會大打折扣,特別是在面對需要“橫向分析、縱向?qū)Ρ取钡腂I報表場景時,范式建模反而成了一種“性能瓶頸”。某些時候老板希望一鍵拉出“某類客戶在近12個月的消費分布”,用范式建模的結(jié)構(gòu)可能就是又慢又卡還容易報錯,這時候就該考慮另一種更適合“分析型場景”的建模方式了,比如我們接下來要講的——維度建模。
維度建模(Dimensional Modeling)是由 Kimball 首先提出的一種數(shù)據(jù)建模方法,主要應(yīng)用于數(shù)據(jù)集市的構(gòu)建,適用于以分析需求為主導(dǎo)的業(yè)務(wù)場景,以“業(yè)務(wù)流程”為核心,以“事實數(shù)據(jù)”為中心,通過組織維度(如時間、地區(qū)、產(chǎn)品等)和度量指標(biāo)(如銷售額、訂單數(shù)、訪問量等),形成面向主題的分析數(shù)據(jù)結(jié)構(gòu)。

維度建模將表劃分為兩類:事實表和維度表,通過它們之間的關(guān)聯(lián)構(gòu)建模型結(jié)構(gòu),前者用于存儲可度量的業(yè)務(wù)事件(如交易、訂單、點擊),后者用于描述這些事件發(fā)生的背景信息(如發(fā)生時間、發(fā)生地點、客戶身份等)。
換句話說,維度建模就是為“看得懂、分析快”而設(shè)計的結(jié)構(gòu),它不追求字段最規(guī)范、結(jié)構(gòu)最嚴(yán)謹(jǐn),而是優(yōu)先考慮業(yè)務(wù)使用時的便捷性,維度建模讓數(shù)據(jù)像拼圖一樣組成業(yè)務(wù)故事:一張訂單背后有哪些客戶?這位客戶來自哪里?在什么時間下的單?買的什么商品?……
這些信息原本可能散落在多個系統(tǒng)表中,維度建模把它們重新整合,讓業(yè)務(wù)視角可以一目了然地串聯(lián)起來,相比范式建模強調(diào)“數(shù)據(jù)不重復(fù)、結(jié)構(gòu)不冗余”,維度建模在意的是“查詢效率高、業(yè)務(wù)口徑準(zhǔn)、指標(biāo)邏輯清晰”。
在維度建模過程中,通常包括以下幾個核心步驟:
1、選擇業(yè)務(wù)過程:明確需要建模的業(yè)務(wù)主題,例如“訂單處理”或“客戶注冊”;
2、聲明粒度:確定事實表中一行數(shù)據(jù)的含義,例如“每一筆訂單”或“每一訂單中每個商品”;
3、識別維度:從業(yè)務(wù)場景中識別出可供分析的維度,例如“時間”、“客戶”、“產(chǎn)品”等;
4、確定事實:確定需要追蹤的度量指標(biāo),例如“金額”、“數(shù)量”、“時長”等。
維度建模最常采用的模型結(jié)構(gòu)是星型模型(Star Schema),即以中心事實表為核心,連接多個維度表,其他常見結(jié)構(gòu)還包括雪花模型和星座模型。

標(biāo)準(zhǔn)的星型模型,維度只有一層,分析性能最優(yōu)
雪花模型具有多層維度,比較接近三范式設(shè)計,較為靈活
星座模型基于多個事實表,事實表之間會共享一些維度表,是大型數(shù)據(jù)倉庫中的常態(tài),是業(yè)務(wù)增長的結(jié)果,與模型設(shè)計無關(guān)
總的來說,維度建模是以業(yè)務(wù)分析為導(dǎo)向的數(shù)據(jù)建模方式,它用數(shù)據(jù)語言表達(dá)業(yè)務(wù)過程,強調(diào)主題清晰、結(jié)構(gòu)簡潔、分析高效,主要適用于數(shù)據(jù)集市層,但很難提供一個完整地描述真實業(yè)務(wù)實體實體之間的復(fù)雜關(guān)系的抽象方法。
實體建模(Entity Modeling),是一種從業(yè)務(wù)視角出發(fā),抽象現(xiàn)實世界中“事物”及其“關(guān)系”的建模方法,是數(shù)據(jù)建模工作中最基礎(chǔ)、也最貼近業(yè)務(wù)本質(zhì)的環(huán)節(jié)。
它強調(diào)對業(yè)務(wù)對象,即“實體”的定義,以及實體之間邏輯關(guān)系的刻畫,每個實體通常對應(yīng)業(yè)務(wù)中一個可以獨立存在的“事物”,如客戶、訂單、產(chǎn)品、合同等;實體之間的關(guān)系則描述它們在業(yè)務(wù)中的連接方式,比如“一位客戶可以下多個訂單”、“一個訂單中包含多個商品”。
在數(shù)據(jù)建模流程中,實體建模一般作為概念建模階段的主要任務(wù),用于描述企業(yè)核心業(yè)務(wù)概念及其結(jié)構(gòu)、澄清各業(yè)務(wù)對象之間的聯(lián)系、為后續(xù)邏輯建模和物理建模奠定基礎(chǔ)。
實體建模常見的表示形式是?ER 圖(Entity-Relationship Diagram),通過“實體Entity”、“屬性Attribute”和“關(guān)系Relationship”的組合來構(gòu)建業(yè)務(wù)藍(lán)圖。
在任何一個大型的數(shù)據(jù)系統(tǒng)建設(shè)中,實體建模往往都是從零開始搭建的起點,不能一上來就做范式設(shè)計、也不能立刻搭建事實表和維度表,因為這時候連“客戶”“訂單”等基本業(yè)務(wù)實體的定義都可能模糊不清。
只有在實體建模階段,把核心對象抽象清楚、業(yè)務(wù)邊界理順,后續(xù)才能正確構(gòu)建維度建模結(jié)構(gòu)(哪些維度歸屬哪個主題)、合理拆解邏輯模型(如何定義主鍵、外鍵、依賴)、穩(wěn)妥推進(jìn)數(shù)據(jù)標(biāo)準(zhǔn)制定與元數(shù)據(jù)管理。
可以說,如果沒有良好的實體建模,數(shù)據(jù)建模工作就缺乏“地基”,再多的結(jié)構(gòu)也只是空中樓閣,和維度建模、范式建模相比,實體建模強調(diào)的是“抽象能力”和“溝通能力”,不講求性能,也不立即落地,但它的意義在于讓所有數(shù)據(jù)工作都有了一個共同的起跑線。

實體建模強調(diào)業(yè)務(wù)抽象,范式建模強調(diào)結(jié)構(gòu)規(guī)范,維度建模則追求分析效率。三者各有所長,服務(wù)于不同的數(shù)據(jù)使用場景。在真實項目中,沒有哪一種建模方式是“標(biāo)準(zhǔn)答案”,更多時候,它們是協(xié)同使用、分層應(yīng)用、動態(tài)演進(jìn)的,理解建模方法背后的系統(tǒng)邏輯和業(yè)務(wù)目標(biāo),才是做好數(shù)據(jù)建模的第一步關(guān)鍵。
(部分內(nèi)容來源網(wǎng)絡(luò),如有侵權(quán)請聯(lián)系刪除)