我想创建一个表,其中表的名称是日期。当我收集当天的库存数据时,我想将它存储起来:
$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?
“生成越来越多的表与”保持正好相反 数据库干净“。干净的数据库是一个明智的数据库, 标准化的,固定的模式,您可以对其进行查询。“
如果这不是正确的方法,有人会建议会是什么?很多人评论这个问题表明这不是一个“干净”的解决方案吗?
答案 0 :(得分:1)
不要将数据拆分成多个表格。这将成为维护的噩梦,尽管最初这样做似乎是明智的。
我建议您创建一个日期列,其中包含您当前要放入表名的信息。数据库非常聪明地有效地存储日期。只需确保使用正确的数据类型,而不是字符串。通过向该列添加索引,您在查询时也不会受到性能损失。
您获得的是查询的完全灵活性。您可以从这样的表中提取的数据几乎没有限制。您可以根据日期范围等与其他表联接。当您按日期将数据拆分到表中时,这是不可能的(或者至少要复杂得多和繁琐)。例如,在一周,一个月或一年中获得某些值的平均值甚至不容易。
如果 - 这取决于您将收集的实际数据量 - 未来某个时间数据会急剧增长,我估计会超过数百万行 - 您可以查看数据分区功能MySQL提供开箱即用的功能。但是,我不建议立即使用它们,除非您已经有明确的数据增长模型。
根据我的经验,在大多数情况下很少需要这种技术。我使用了100千兆字节范围内的表,表有数百万行。当数据变得庞大时,这一切都需要很好的索引和精心设计的查询。