資料倉庫物理模型設計規範整理
日常資料功能開發過程中,會經常要開發人員自己設計物理儲存模型(底層模型),在設計過程中往往會遇到一些設計共性問題,比如:物理模型需要的主鍵採用自然鍵還是業務鍵、相關時間戳欄位(業務相關表和非業務相關表)、冗餘欄位是否需要、是否要保留 “歷史臺賬資訊”、在使用PowerDesigner設計物理表過程中常遇到的問題等等。
2.規範要點
2.1自然鍵OR代理建
自然鍵:由現有實體存在的屬性組成的鍵值,在業務概念上是唯一的。
代理鍵:不具有業務含義的鍵值表示資料唯一。
一個典型的例子,對於自然人唯一性的判別,可以以姓名+身份證件型別+身份證件號碼為主唯一標識,但實際我們儲存的時候並沒有採用這三個屬性欄位作為唯一鍵,而是採用了自增序列的代理鍵,登記序號作為唯一鍵。
對於自然鍵,它不需要引入一個新的“非自然”列,並且與業務直接緊密耦合,很清楚透過自然鍵就可以明確業務上唯一的標準。但是,自然鍵正是由於直接對接業務屬性值,當業務需求發生變更時,可能導致屬性發生變更,唯一鍵可能就要重新指定。
對於代理鍵,需要引入一個新的“非自然”列,它不與業務直接耦合,更容易維護。當業務需求發生變更時,不會對它產生影響。從某種意義上講代理鍵可以看做是直接物理儲存唯一性的鍵值。但其自身由於跟業務沒有直接耦合,通常是“不可讀”的,無法通過一個代理鍵值直接定位出資料的業務含義。
這兩種鍵型別,並沒有說哪種是最優的,在模型設計中,該如何選用根據實際情況來定奪,選擇更合適的。
2.2 時間戳欄位
資料的變化一般是發生在欄位一級的,在欄位一級新增跟蹤時間,即給每一個欄位蓋上一個時間戳。該方法是反映資料變化最詳細的記錄標識,但也因此會大大增加資料儲存量,一般不會採用。我們一般會在行級新增時間戳,當資料發生變化時,此欄位同時被修改。在資料抽取程式中,時間戳是非常重要的欄位,通過系統時間與時間戳欄位的值來決定抽取哪些資料。資料庫快照就是在該層次上隱式或顯式地加蓋時間戳,所有時間推移線上的資料庫變化,基本都是基於時間戳來體現。
2.3 可變性質冗餘欄位保留與否
2.4 元資料欄位的統一性
元資料是資料倉庫環境的一個重要組成部分。所謂元資料就是資料的資料(可以理解為定義資料的資料)。對於目前我們使用的自然庫來說,最為重要並且目前問題較多的地方在於,同一種實體的某種屬性(ERD的關鍵字物理上暫時理解為欄位列)在物理化為不同物理儲存時發生了變化,這種變化即有名稱上的變化也有屬性度量上的變化。即:物理表從源端歸集到自然庫時,對於相同意義的欄位,在不同表裡定義不一致。
在資料倉庫中,相同意義的欄位屬性應該統一定義,或者定義為具有關聯性的欄位。前期建設或後期擴建時進行統一處理轉化定義。對於提到的統一定義,即名稱和欄位長度屬性保持一致,在元資料中只有一條定義資料與實體屬性對應。例如:自然人的姓名欄位,在DJ_ZRR表中定位XM,在其他表裡涉及到此欄位對應的屬性時也應該統一使用XM定義。實際中在不同的表裡定義是不同的,比如在核心徵管中涉及到自然人姓名的定義各式各樣不盡相同。這樣的資料,如果歸集到自然庫不做統一處理轉化時,就會出現當姓名發生定義的變更時,很難全部將所有自然人姓名進行修改,總會那麼幾個被遺漏。
在實際設計中,我們經常會遇到在源系統中同一物理欄位對應著不同ERD實體的屬性。比如:DJXH在源系統中,企業登記表與自然人登記表不同物理表裡儲存的資料物件完全不一樣,但是欄位定義卻一致。當兩種資料放到同一個物理表時為了加以區分就會做名稱的調整,在原有欄位前面加上來源命名簡稱字首做以區分,這樣就涉及到了在元資料統一時做到關聯性。如:DJXH ----- DJXH_ZRR、DJXH_QY。當發生DJXH定義調整時,就可關聯到所有DJXH相關定義的欄位,對其進行統一修改。
當一張物理表某幾個欄位被冗餘到另外一張物理表中,為了與被冗餘表的相同欄位(或者不相同,為了區分是被冗餘的欄位)加以區分,一般是將冗餘表表名或者簡稱加到欄位後邊,如:SB_SBXX表的LRRQ欄位,冗餘到SB_KJGRSDSBGB_MX表中,欄位命名為LRRQ_SBXX。
2.5分割槽表主鍵OR唯一分割槽索引
對於分割槽表不建議使用主鍵,因為在建立主鍵的同時,會自動建立全域性唯一索引,當刪除分割槽、TRUNCATE分割槽、交換分割槽等會造成主鍵和全域性索引的失效。事後要重建,則會因為資料量非常大導致重建主鍵要花很長時間,並且有時在刪除主鍵重建時發現,主鍵被成功刪除,但唯一索引卻沒有被同時刪掉。所以,建議採用本地分割槽唯一索引,如果分割槽欄位設計合理,使用分割槽索引要比全域性索引效率高一些,而且主鍵和唯一分割槽索引的效率大體相當,當發生上述的刪除分割槽、分割槽交換等操作時,只會對相關分割槽產生影響,重建時也只需要重建相關分割槽對應的唯一索引。
建立分割槽唯一索引時,只需要建立唯一索引時包含分割槽鍵即可。如:SDFX_ZRRNSD表,主鍵為:PK_SDFX_ZRRNSD (CYZXH+SDNF+GRSDSSDXM_DM),由於已經包含分割槽鍵SDNF,可以直接修改為分割槽唯一索引:
CREATE UNIQUE INDEX IDX_SDFX_ZRRNSD_1
ON SDFX_ZRRNSD(CYZXH,GRSDSSDXM_DM,SDNF)
LOCAL TABLESPACE TS_GS_ZRRSJK_IDX;
2.6命名規範
2.6.1表命名
2.6.2 檢視命名
3. 使用PowerDesign設計過程中的注意事項
在使用PowerDesign設計物理表過程中,對於物理表的code、name、comment 以及欄位相關的code、name、comment、default value是否要預設等都有一定的規範和要求。主鍵所帶的唯一索引要指定索引表空間、普通索引、唯一索引也要指定索引表空間以及命名規範等。
3.1 物理模型設計
3.1.1物理表設計
表名的code要大寫、name 為中文名稱、表的comment為表的詳細說明
對於表的Owner不建議勾選,預設為None
欄位的comment為欄位詳細註釋、name為欄位簡要說明、欄位的code要大寫
欄位型別要大寫
不建議在模型表裡,直接定義default value 的值
主鍵定義:PK + table Name 如:PK_DJ_ZRR;同時應該指定主鍵使用索引儲存表空間
索引定義:IDX_ 開頭,後面跟表名(可以簡寫)加上欄位名,同時指定儲存的索引表空間
對於本地分割槽索引有個local屬性需要新增,這個在PowerDesign上不好加,可以選擇在索引的【Physical Option】裡的SQL框裡直接填寫,如:
3.1.2檢視設計
檢視的name為中文名稱、code需要大寫、comment為檢視的詳細說明
檢視的Owner預設為None
檢視的Usage預設為updatable
檢視模型的【oracle】屬性中勾選強制建立的【Force】選項
檢視SQL定義的末尾不要出現結束的分號“;”以及註釋
分號以及註釋會導致PowerDesign生成檢視定義語句時報錯