Teradata:如何設計表以使用許多外鍵列進行規範化?
我正在 Teradata 中設計一個大約 30 列的表。這些列將需要儲存幾個時間間隔樣式的值,例如 Daily、Monthly、Weekly 等。將實際字元串值儲存在表中是不好的設計,因為這將是數據的嚴重重複。相反,我想做的是創建一個原始查找表。該表將包含 Daily、Monthly、Weekly,並將使用 Teradata 的標識列來派生主鍵。然後,這個主鍵將作為外鍵儲存在我正在創建的表中。
該表將設計如下:
ID 類型值 --- ------------ ------------ 每天 1 次間隔 2 間隔每月 3 間隔每週 4 時間範圍 24x7 5 時間範圍 8x5
這適用於我的應用程序,因為我只需要知道原始鍵值,因為我填充了我的 Web 表單的下拉列表。但是,我們使用的其他應用程序將需要執行報告或通過提要接收此數據。因此,需要創建一個視圖,將該表連接到原始表,以便它可以實際返回 Daily、Monthly 和 Weekly。
我關心的是性能。
我從來沒有創建過包含如此大量外鍵欄位的表,而且我對 Teradata 相當陌生。在我踏上艱難地解決這一切的漫長道路之前,我想要任何我能得到的關於實現目標的最佳方式的建議。
免責聲明:我從未建構過 Teradata 系統,因此我不能從第一手經驗中聲稱這一點,但我會解釋其中的原因。
我認為 Teradata 將能夠有效地生成此視圖。從您所說的來看,它似乎只是將一些非常小的維度表與事實表連接起來。連接操作將相對有效。除非我誤解了您的要求,否則這些列允許您的應用程序從多粒度事實表中選擇各種數據匯總。
儘管 Teradata 是一個無共享系統,但我看不到任何視圖要求跨節點推送大型半連接或類似的東西。
除此之外,我只能建議你吸吮它並看看。如果您沒有任何地方可以進行試驗,您可以從他們的網站下載 Teradata 的快速版本,看看您是否可以對該結構進行原型設計,以了解查詢計劃的實際情況。
您可以考慮使用“智能鍵”而不是無意義的順序值,然後您就可以使用它而不必加入此查找表:
ID Type Value --- ------------ ------------ 1 Interval Daily 7 Interval Weekly 30 Interval Monthly 85 TimeFrame 8x5 247 TimeFrame 24x7
然後,您可以通過查找 (
schedule
?) 列對事實/主表過濾進行查詢,而無需JOIN
s:SELECT ... FROM MainTable WHERE schedule = 30
這樣,您可以使用查找表中的值填充下拉列表,並對事實/主表進行有效查詢。