在我從OLTP數據庫構建的全新數據倉庫中,我刪除了所有IDENTITY列並將它們更改爲INT列。主鍵和約束條件
什麼是關於最佳實踐以下特別是因爲倉庫規格化:
- 主鍵
- >這個現在可能是一個組合鍵,因爲好幾桌走到了一起
- >我需要遵循OLTP的關鍵結構?
- 約束
- >有一些約束(NOT NULL)與比特列的默認值(0)
在我從OLTP數據庫構建的全新數據倉庫中,我刪除了所有IDENTITY列並將它們更改爲INT列。主鍵和約束條件
什麼是關於最佳實踐以下特別是因爲倉庫規格化:
對於主鍵,可以考慮使用替代的或替代的密鑰;您需要迎合緩慢變化的尺寸,例如如果您在過去5年中對每位已婚/未婚銷售人員的平均銷售情況進行了報告,則您需要註冊一個事實,即有人未婚2年,然後結婚3年。這意味着您的數據倉庫將對同一個人有兩個維度錶行。以下OLTP結構將是困難的:)
約束不是一個問題;數據倉庫針對讀取進行了大量優化(假設您將其作爲批處理進行填充),並且約束條件在讀取操作中並不是真正的因素。您通常可以繞過DW填充作業的任何約束問題,並在必要時處理報告工具中的空值等。確保默認值符合您的概念數據模型並且不會在DW客戶端工具中引入問題更重要。
我要說約2: bit列 - >工作的布爾列 - >只有1/0(真/假)允許 - >約束OK
對於尺寸表:
WHERE
子句中有函數,則向維度表中添加一列並預先計算值。對於事實表:
請考慮一個替代的自動增量(標識)PK,以便輕鬆分區,如果使用複合PK,你可以做一個組合唯一的非聚集代替。
在安全的地方爲您的外鍵準備腳本,在加載事實表之前放下鍵是爲了加快加載速度。有些人使用外鍵「僅邏輯」運行DW,他們在加載後使用「查找孤兒」查詢。
ETL
@ Jeremy-所以,如果我的OLTP有一個Person表和MaritalStatus查找和PersonsMaritalStatus表,然後我去規格化它,然後它會在被稱爲人與PERSONID和MaritalStatusId的複合鍵中的倉庫一個表。這可以解釋你描述的婚姻狀況的變化。我的問題是:
我是否使用組合鍵或創建一個新的列(就像我在OLTP中做的那樣? – 2009-06-19 13:02:36
那麼難的是你必須做的郵編或******中國或任何其他一個或多個字段的組合,同樣的事情會經常發生變化,那你需要報告。 這是把手慢慢改變,爲什麼大多數解決方案尺寸將實施一個備用鍵:)寫得 – 2009-06-19 15:58:22