Teradata:如何使用许多外键列设计要规范化的表?

时间:2012-04-26 13:12:33

标签: performance foreign-keys primary-key primitive teradata

我正在Teradata设计一个大约30列的表格。这些列将需要存储几个时间间隔样式的值,例如每日,每月,每周等。将实际字符串值存储在表中是不好的设计,因为这将是数据的残酷重复。相反,我想要做的是创建一个原始的查找表。此表将保存每日,每月,每周,并将使用Teradata的标识列来派生主键。然后,这个主键将存储在我创建的表中作为外键。

这对我的应用程序工作正常,因为我需要知道的是原始键值,因为我填充了我的Web表单的下拉列表。但是,我们使用的其他应用程序需要运行报告或通过提要接收此数据。因此,需要创建一个视图,将该表连接到基元表,以便它实际上可以返回每日,每月和每周。

我担心的是表现。我从来没有创建过如此大量的外键字段的表,而且对于Teradata来说还是比较新的。在我走上漫长的道路,艰难地解决这个问题之前,我希望能有任何建议,以达到实现目标的最佳途径。

编辑:我想我应该补充一点,这个查找表将是不相关原语的混杂。它将包含与上面已经提到的时间间隔相关的一组值,但也包括诸如24x7和8x5的时间帧。该表的设计如下:

ID  Type         Value
--- ------------ ------------
1   Interval     Daily
2   Interval     Monthly
3   Interval     Weekly
4   TimeFrame    24x7
5   TimeFrame    8x5

编辑第2部分:添加了新标记,以便更多地了解此问题。

1 个答案:

答案 0 :(得分:2)

你所做的应该没问题。显然,您需要运行实际查询并在适当的时候收集统计信息。

我可以推荐的一件事是在查找表中有一个额外的行,如下所示:

ID  Type         Value
--- ------------ ------------
0   Unknown      Unknown

然后在主表中,不是将字段设为null,而是将它们赋值为0.这允许您使用内部连接而不是外部连接,这将有助于提高性能。