将表中的数据计数存储到"趋势"表

时间:2015-05-01 07:29:36

标签: mysql database database-design data-modeling kpi

我们有一个表,我们必须为不同的字段组合提供许多计数。 这需要花费很长时间才能实现,并且不提供历史数据,所以我想以最佳方式将这些计数存储在另一个表中,并带有时间戳,因此我们可以快速查询它们了解历史趋势。 对于每个计数,我们需要4条信息来识别它,并且我们想要存储大约1000种不同的指标。 我考虑了三种不同的策略,有计数和时间戳,但在如何识别检索计数方面有所不同。

  1. 1个包含4个字段的表来识别计数,4个字段不会被标准化,因为它们包含来自不同外部表的数据。
  2. 1个表格,其中包含1"标签"字段,将包含4条信息作为标记。这个标签可以被丰富并保存在另一个表中,可能每个标签部分都有一个字段,并将它们链接到外部表格。
  3. 不同的计数组的不同表可以在一个或多个字段上进行标准化,但这需要6到几十个表。
  4. 我和第一个人一起去,根本没有正常化,但想知道是否有人有更好或更简单的方法存储所有这些。

    值的示例: 状态,安装所有的,虚拟的1234,01 / 05/2015

    • 第一个字段,状态,最多可包含10个值
    • 已安装的第二个字段,每个字段1最多可包含10个
    • 第三个字段all,最多可以包含10个不同的值,但它们对于所有类别都是相同的
    • 第四个字段virtual,最多可以包含30个值,并且对于之前的所有类别也是相同的。
    • 最后两个字段是数字和时间戳

    谢谢, 艾萨克

1 个答案:

答案 0 :(得分:1)

当您拥有大量指标并且不需要使用它们来进行指标内计算时,您可以选择1.解决方案。

我可能会像这样构建一个表

Satus_id | Installed_id | All_id | Virtual_id | Date | Value

或者,如果前四列的组合具有正确的名称,我可能会创建两个表(我认为你将这种可能性称为第二个解决方案与2):

Metric Table
Satus_id | Installed_id | All_id | Virtual_id | Metric_id | Metric_Name 

Values Table 
Metric_id | Date | Value

如果您有指标或其他详细信息的名称,那么这是很好的,否则您将需要使用第一种方法复制每种组合。

在这两种情况下,使用不同的指标进行行内操作会有点复杂,因此这种方法仅适用于高级KPI。

最后,因为最后两个字段的所有可能组合始终存在于您的表中,您可以考虑将它们转换为列:

Satus_id | Installed_id | Date | All1_Virtual1 | All1_Virtual2 | ... | All10_Virtua30

有10个全部值和30个虚拟值,你将拥有300列,不是很容易处理,但如果你必须这样做,它们将是值得的:

(All1_Virtual2 - All5_Virtual23) * All6_Virtual12

但在这种情况下,我希望(如果可能的话)提前进行计算以减少列数。