mysql - 将表中的数据计数存储到 "trending"表中

标签 mysql database database-design data-modeling kpi

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

  1. 1 个表有 4 个字段来标识计数,这 4 个字段不会被标准化,因为它们包含来自不同外部表的数据。
  2. 1 个表,包含 1 个“标签”字段,其中将包含 4 条信息作为标签。可以丰富此标签并将其保存在另一个表中,该表可能为每个标签部分都有一个字段并将它们链接到外部表。
  3. 用于不同计数组的不同表格能够对一个或多个字段进行标准化,但这需要 6 到数十个表格。

我选择第一个,根本没有标准化,但想知道是否有人有更好或更简单的方法来存储所有这些计数。

值的示例: 状态,已安装,全部,虚拟,1234,01/05/2015

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

谢谢, 艾萨克

最佳答案

当您有很多指标并且不需要使用它们进行指标内计算时,您可以选择 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

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

关于mysql - 将表中的数据计数存储到 "trending"表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29983162/

相关文章:

mysql - 通过逻辑表达式选择mysql字段

php - 在 codeigniter 中通过反馈表传递 customerID?

php - 如何更新远程 MS Access 数据库?

mysql - sun mysql数据库管理器哪里去了?

php - Laravel - PDO - 动态表名

php - 使用 PHP 更新 MySQL

c# - C# 中的备用数据库连接

database-design - 表中更新字段的首选方法是什么?

php - 时事通讯服务的数据库架构(用php)

sql-server - 两个不同数据库中的两个表之间的连接有什么问题?