Performance

Teradata:如何設計表以使用許多外鍵列進行規範化?

  • April 26, 2012

我正在 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?) 列對事實/主表過濾進行查詢,而無需JOINs:

SELECT ...
 FROM MainTable
WHERE schedule = 30

這樣,您可以使用查找表中的值填充下拉列表,並對事實/主表進行有效查詢。

引用自:https://dba.stackexchange.com/questions/17121