1. 數據建模的分析方法有哪些並寫出他們的大概介紹
從目前的資料庫及數據倉庫建模方法來說,主要分為四類。
第一類是大家最為熟悉的關系資料庫的三範式建模,通常我們將三範式建模方法用於建立各種操作型資料庫系統。
第二類是Inmon提倡的三範式數據倉庫建模,它和操作型資料庫系統的三範式建模在側重點上有些不同。Inmon的數據倉庫建模方法分為三層,第一層是實體關系層,也即企業的業務數據模型層,在這一層上和企業的操作型資料庫系統建模方法是相同的;第二層是數據項集層,在這一層的建模方法根據數據的產生頻率及訪問頻率等因素與企業的操作型資料庫系統的建模方法產生了不同;第三層物理層是第二層的具體實現。
第三類是Kimball提倡的數據倉庫的維度建模,我們一般也稱之為星型結構建模,有時也加入一些雪花模型在裡面。維度建模是一種面向用戶需求的、容易理解的、訪問效率高的建模方法,也是筆者比較喜歡的一種建模方式。
第四類是更為靈活的一種建模方式,通常用於後台的數據准備區,建模的方式不拘一格,以能滿足需要為目的,建好的表不對用戶提供介面,多為臨時表。
下面簡單談談第四類建模方法的一些的經驗。
數據准備區有一個最大的特點,就是不會直接面對用戶,所以對數據准備區中的表進行操作的人只有ETL工程師。ETL工程師可以自己來決定表中數據的范圍和數據的生命周期。下面舉兩個例子:
1)數據范圍小的臨時表
當需要整合或清洗的數據量過大時,我們可以建立同樣結構的臨時表,在臨時表中只保留我們需要處理的部分數據。這樣,不論是更新還是對表中某些項的計算都會效率提高很多。處理好的數據發送入准備載入到數據倉庫中的表中,最後一次性載入入數據倉庫。
2)帶有冗餘欄位的臨時表
由於數據准備區中的表只有自己使用,所以建立冗餘欄位可以起到很好的作用而不用承擔風險。
舉例來說,筆者在項目中曾遇到這樣的需求,客戶表{客戶ID,客戶凈扣值},債項表{債項ID,客戶ID,債項余額,債項凈扣值},即客戶和債項是一對多的關系。其中,客戶凈扣值和債項余額已知,需要計算債項凈扣值。計算的規則是按債項余額的比例分配客戶的凈扣值。這時,我們可以給兩個表增加幾個冗餘欄位,如客戶表{客戶ID,客戶凈扣值,客戶余額},債項表{債項ID,客戶ID,債項余額,債項凈扣值,客戶余額,客戶凈扣值}。這樣通過三條SQL就可以直接完成整個計算過程。將債項余額匯總到客戶余額,將客戶余額和客戶凈扣值冗餘到債項表中,在債項表中通過(債項余額×客戶凈扣值/客戶余額)公式即可直接計算處債項凈扣值。
另外還有很多大家可以發揮的建表方式,如不需要主鍵的臨時表等等。總結來說,正因為數據准備區是不對用戶提供介面的,所以我們一定要利用好這一點,以給我們的數據處理工作帶來最大的便利為目的來進行數據准備區的表設計。