【问题标题】:Creating a table with the name being a variable date?创建一个名称为可变日期的表?
【发布时间】:2013-04-27 05:52:37
【问题描述】:

我想创建一个表格,表格的名称是日期。当我收集那天的股票数据时,我想这样存储它:

$date = date('Y-m-d');
$mysqli->query(
    "CREATE TABLE IF NOT EXISTS `$date`(ID INT Primary Key)"
);

这样我就会有一个类似的数据库:

2013-5-1: AAPL | 400 | 400K
          MFST | 30  | 1M
          GOOG | 700 | 2M
2013-5-2: ...

我认为存储这样的信息会更容易,但我看到与此类似的问题已关闭。

How to add date to MySQL table name?

“生成越来越多的表与“保持 数据库干净”。一个干净的数据库是一个明智的, 您可以对其运行查询的标准化、固定架构。”

如果这不是正确的方法,有人可以建议怎么做吗?许多评论这个问题的人表示这不是一个“干净”的解决方案?

【问题讨论】:

  • 你有什么问题?
  • 链接到类似的封闭问题?
  • 为什么不只添加一个日期列?
  • 您可以反过来争论:为什么不为日期和股票名称的每个组合添加一个表格?然后你可以有表 AAPL-2013-5-1、MFST-2013-5-1 等等。原因是您永远无法针对它们编写任何有用的查询。通过根据日期将数据拆分到多个表中,您将如何计算整个月的平均股票价格?
  • 你不应该担心得到大表,因为数据量或多或少与你的模式相同。如果您只使用 一个 表遇到性能问题,您肯定会使用其中的许多表(但仍取决于使用情况)。

标签: mysql mysqli


【解决方案1】:

不要将数据拆分为多个表。这将成为维护的噩梦,尽管一开始这样做似乎很明智。

我建议您创建一个日期列,其中包含您当前要放入表名中的信息。数据库在有效存储日期方面非常聪明。只要确保使用正确的数据类型,而不是字符串。通过向该列添加索引,您在查询时也不会受到性能损失。

您获得的是查询的完全灵活性。您可以从这样的表中提取的数据几乎没有限制。您可以根据日期范围等加入其他表格。当您按日期将数据拆分为表格时,这将是不可能的(或者至少更加复杂和繁琐)。例如,仅仅获得一周、一个月或一年内某个值的平均值甚至都不容易。

如果 - 这取决于您将收集的实际数据量 - 未来某个时间数据会急剧增长,我估计会超过几百万行 - 您可以查看 MySQL 提供的数据分区功能盒子外面。但是,我不建议立即使用它们,除非您已经有明确的数据增长模型。

根据我的经验,在大多数情况下很少真正需要这种技术。我曾使用过 100 GB 范围内的表,其中表有数百万行。当数据变得庞大时,这完全取决于良好的索引和精心设计的查询。

【讨论】:

  • 我会好好考虑的,看来大家都说会失控,我肯定看出来了。感谢大家的意见。
  • 哦,那么我会选择日期是我看到的特定日期。
  • 是的,或者带有范围等。更灵活。不要太担心该技术的理论局限性。它们比你现在想象的要远得多:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-20
  • 1970-01-01
  • 2012-08-25
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多