提起資料建模來,有一點是首先要強調的,資料建模師和dba有著較大的不同,對資料建模師來說,對業務的深刻理解是第一位的,不同的建模方法和技巧是為業務需求來服務的。而本文則暫時拋開業務不談,主要關注於建模方法和技巧的經驗總結。
從目前的資料庫及資料倉儲建模方法來說,主要分為四類。
第一類是大家最為熟悉的關聯式資料庫的三正規化建模,通常我們將三正規化建模方法用於建立各種操作型資料庫系統。
第二類是inmon提倡的三正規化資料倉儲建模,它和操作型資料庫系統的三正規化建模在側重點上有些不同。inmon的資料倉儲建模方法分為三層,第一層是實體關係層,也即企業的業務資料模型層,在這一層上和企業的操作型資料庫系統建模方法是相同的;第二層是資料項集層,在這一層的建模方法根據資料的產生頻率及訪問頻率等因素與企業的操作型資料庫系統的建模方法產生了不同;第三層物理層是第二層的具體實現。
第三類是kimball提倡的資料倉儲的維度建模,我們一般也稱之為星型結構建模,有時也加入一些雪花模型在裡面。維度建模是一種面向使用者需求的、容易理解的、訪問效率高的建模方法,也是筆者比較喜歡的一種建模方式。
第四類是更為靈活的一種建模方式,通常用於後台的資料準備區,建模的方式不拘一格,以能滿足需要為目的,建好的表不對使用者提供介面,多為臨時表。
下面簡單談談第四類建模方法的一些的經驗。
資料準備區有乙個最大的特點,就是不會直接面對使用者,所以對資料準備區中的表進行操作的人只有etl工程師。etl工程師可以自己來決定表中資料的範圍和資料的生命週期。下面舉兩個例子:
1)資料範圍小的臨時表
當需要整合或清洗的資料量過大時,我們可以建立同樣結構的臨時表,在臨時表中只保留我們需要處理的部分資料。這樣,不論是更新還是對錶中某些項的計算都會效率提高很多。處理好的資料傳送入準備載入到資料倉儲中的表中,最後一次性加載入資料倉儲。
2)帶有冗餘欄位的臨時表
由於資料準備區中的表只有自己使用,所以建立冗餘字段可以起到很好的作用而不用承擔風險。
舉例來說,筆者在專案中曾遇到這樣的需求,客戶表,債項表,即客戶和債項是一對多的關係。其中,客戶淨扣值和債項餘額已知,需要計算債項淨扣值。計算的規則是按債項餘額的比例分配客戶的淨扣值。這時,我們可以給兩個表增加幾個冗餘字段,如客戶表,債項表。這樣通過三條sql就可以直接完成整個計算過程。將債項餘額彙總到客戶餘額,將客戶餘額和客戶淨扣值冗餘到債項表中,在債項表中通過(債項餘額×客戶淨扣值/客戶餘額)公式即可直接計算處債項淨扣值。
另外還有很多大家可以發揮的建表方式,如不需要主鍵的臨時表等等。總結來說,正因為資料準備區是不對使用者提供介面的,所以我們一定要利用好這一點,以給我們的資料處理工作帶來最大的便利為目的來進行資料準備區的表設計。
資料建模方式
提起資料建模來,有一點是首先要強調的,資料建模師和dba有著較大的不同,對資料建模師來說,對業務的深刻理解是第一位的,不同的建模方法和技巧是為業務需求來服務的。而本文則暫時拋開業務不談,主要關注於建模方法和技巧的經驗總結。從目前的資料庫及資料倉儲建模方法來說,主要分為四類。第一類是大家最為熟悉的關聯...
13 資料建模 建模方法三 實體建模
實體建模法並不是資料倉儲建模中常見的乙個方法,它 於哲學的乙個流派。從哲學的意義上說,客觀世界應該是可以細分的,客觀世界應該可以分成由乙個個實 體,以及實體與實體之間的關係組成。我們在資料倉儲的建模過程中完全可以引入這個抽象的方法,將整個業務也可以劃分成乙個個的實體,而每個實體之間的 關係,以及針對...
UML 資料建模
一 資料庫模簡介 二 資料建模元素 1 表 table 2 表索引 table index 3 表觸發器 table trigger 4 表約束 table constraint 5 檢視 view 6 儲存過程 stored procedure 三 資料建模例項 四 總結 資料建模不僅可以物件的屬...