【问题标题】:Time Machine for Business Intelligence (PHP/MySQL)商业智能时间机器 (PHP/MySQL)
【发布时间】:2011-08-17 12:45:39
【问题描述】:

目前,我正在使用 PHP/MySQL 从头开始​​为开源 Business Intelligence 软件开发时间机器。

我的时间机器表被所有其他需要日期信息(例如订单、产品等)的表使用,并且它们与time_id 绑定。所以它的 MySQL 表是这样的:

 time_id |  timestamp   | day  |  week  |  month  |  quarter
 1          1303689654    25      17       4         2
 2          1303813842    26      17       4         2
 ...

订单表绑定如下:

order_id    |  time_id  ...
3123           2
...

编辑:类似于STAR SCHEMA

问题还在于获取 TIME (13:45) 信息。通常我不需要这个,但就像订单一样,有时有几张桌子需要这个 HOUR/MINUTE 信息。

如何巧妙地解决这个问题?我有几个解决方案,但首先我想看看你的意见..

【问题讨论】:

  • 看起来像一个设计缺陷。使所有其他表依赖于计时表。帮自己一个忙,用简单的时间戳替换 time_id 列。并将解析该信息的逻辑添加到您需要的各个组件中。
  • 我不明白这样做的目的。为什么不直接使用DATETIME 字段?您可以从中提取所有其他信息(日、周、月...)。
  • @netbrain - 我使用此表进行实时分析 (BI)。所以它就像启动模式。所以我必须这样做。
  • @Pekka - 类似于星型模式 (en.wikipedia.org/wiki/Star_schema)
  • @dino beytar:我想你不明白,日期就是这样,一个日期,而不是你会在星型模式中引用的对象。星型模式的起点是在特定日期售出的单位数,其中日期是时间戳或日期时间,并且您存储单位数和产品 ID,这将反过来引用您的产品表等。

标签: php mysql business-intelligence timemachine


【解决方案1】:

为什么不简单地将时间戳存储在其他表中?

或者,如果您想保留日期表,只需将 TIME 字段添加到需要它的其他表中。

【讨论】:

  • +1 根据您的解决方案,我的时间机器表中不再需要TIMESTAMP。我的意思是,我可以像 (20110403) 一样使用 Ymd 而不是 TIMESTAMP。因为如果我需要时间,我可以从其他桌子上得到它。谢谢...
【解决方案2】:

如果我正确理解你的时间戳,你可能就可以走了:

echo date('H:i.s',1303689654); 

编辑

你想做什么?重新阅读您的问题后,您可能正在寻找 SQL 中的 JOIN 关键字 (brief tute)

【讨论】:

  • 问题是如果你一天中有多个TIME,那么你必须为一天创建多个时间戳。但我一天不应该创造超过一次。至此,ThiefMaster 的方案解决了这个问题。
  • 哦,好的。通常时间戳对于单个操作是唯一的,因此 ThiefMaster 的回答非常合适。 +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
相关资源
最近更新 更多