【问题标题】:How to design table for dynamic number of columns?如何设计动态列数的表格?
【发布时间】:2013-07-18 19:59:23
【问题描述】:

要求:我们必须以特定的时间间隔捕获一天的数据(对于一组数据,时间间隔是恒定的)。时间间隔可以从 5 分钟到 2 小时不等。因此,一天的数据点数量可以从 12 到 288 不等。我们应该如何设计我们的表格以适应这种变化。

我们可以在表中添加 288 列吗?如果时间间隔为 5 分钟,则所有 288 列都将被占用。如果它的 2 小时,则只有第 12 列将被占用。等等。

【问题讨论】:

  • 您使用的是哪个 DBMS?在 Postgres 中,您可以使用 hstore 数据类型来克服 EAV 模式的限制。
  • 感谢您的回复...目前我们正在使用 postgres..但是数据库可以稍后移动到 oracle 或 mysql..

标签: database database-design


【解决方案1】:

你不想要 288 列的表。

很难在没有其他表格概念的情况下设计表格,但基本上 - 有一个时间列,并添加其他时间。如果您有与某个对象相关的时间,请为其相关的对象添加一个外键。如果你想要间隔而不是时间,你可以有一个“间隔”列,它只是用间隔来说明它是它的一部分。

    "TimeOfEvent"
    PK TimeofEventId
    FK EventId
    Interval
    Timestamp

【讨论】:

  • 所以根据这种方法,我们一天将有 ​​288 行条目。由于我们需要一次处理大约 2 个月的数据,因此它不会降低数据库端和编码端的性能,我们使用数据来获得一些输出
  • 我明白你在说什么,这是我的看法:根据你的描述,这个表每天将有 12 到 288 行。这是很多,但至少如果一天中只有 12 个间隔 - 只有 12 行数据要扫描。如果您要创建 288 列;您的查询必须扫描 0 到 176 个空值以检索它需要的数据。
  • 另外,因为您的数据集具有一致的时间间隔;您可以通过定义要选择的列来绕过我扫描 176 个空值的观点。尽管如此,我仍然认为这是一个坏主意。如果您必须经历 5 分钟、10 分钟、20 分钟、分机的每个场景并编写这些,您的 SELECT 语句可能会非常长且难以管理。我不相信使用 TimeOfEvent 表会对选择每一列的性能产生不利影响(尽管我不能保证这一点),您可以在单个查询中设置变量以获得不同的结果。
  • 有趣的是,在此找到任何链接是多么困难。然后,当您找到一个链接时,它会将您带回stackoverflow。找不到任何有用的东西。
  • 感谢您的帮助。我们将使用行概念而不是列的东西..
猜你喜欢
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 2010-11-04
  • 2023-04-09
  • 1970-01-01
  • 2019-12-04
  • 2019-05-13
  • 2021-02-13
相关资源
最近更新 更多