我們已經有了一個數據倉庫的設計,四個維度表和一個事實表創建一個事實表:如何使用自然鍵
- dimUser ID,電子郵件,名字,姓氏
- dimAddress ID,城市
- dimLanguage ID,語言
- dimDate ID,的startDate,結束日期
- factStatistic ID,dimUserId,dimAddressId,dimLanguageId,dimDate,loginCount,pageCalledCount
我們的問題是:我們想要構建事實表,其中包括計算統計信息(取決於userId,日期範圍)和填充外鍵。
但我們不知道如何,因爲我們不知道如何使用自然鍵(這似乎是根據我們閱讀的文獻解決我們的問題)。
我認爲一個自然的關鍵是userId,這在所有ETL作業中都是需要的,這些作業計算出尺寸數據。
但也有許多困難:
-
在ETL作業負載(),我們做INSERT批量插入IGNORE INTO刪除重複=>我們不知道產生該代理鍵
- 如果我們創建元數據(包括一組DIMENSION_NAME,surrogate_key,natural_key的),這不會因爲消除重複的工作
這個問題似乎是消除重複的策略。有更好的方法嗎?
我們正在使用MySQL 5.1,如果它有任何區別。
什麼是您的事實表追蹤?按用戶/地址/語言/「日期範圍」登錄?在我看來,地址和語言是用戶的屬性?而你的日期表有範圍?爲什麼不只是在事實表中存儲單個日期並彙總? –
這是真實設計的簡化模型。但它基本上是每個用戶(具有地址和語言)的登錄和頁面調用。 loginCount和pageCalledCount按日期範圍彙總。 –
我真的不明白你的問題,但如果你正在尋找一種方法來生成和填充代理鍵,那麼我提出了一個相當通用的方法,在[這個問題]中使用映射表(http:// stackoverflow。 COM /問題/ 12657674/SQL-datawarehousing-需要的幫助 - 填充 - 我維 - 使用 - TSQL - 選擇 - 或-A-定)。報告數據庫通常使用人造密鑰,所以我不確定爲什麼要使用自然密鑰;看起來你的問題主要是實現你的ETL過程,而不是你的設計,雖然我可能是錯的。 – Pondlife