归一化日期(yy-mm-dd)还是坚持日期时间?

时间:2013-11-29 16:12:21

标签: mysql sql database-design relational-database

我们正在重新分解我们的数据库,我们每天会向db添加大约100.000行。 每行现在包含一个日期字段(yy-mm-dd),所以今天我们在表格中输入了“2013-11-29”100.000次。

将日期分成单独的表是否有意义,并使用它的id而不是因为我们不存储时间?

那里有交易。如果我们将其分解,我们将在我们想要稍后查看记录时使用另一个JOIN添加到查询中。当我们查询信息时,我们已经加入了3个表,该数据库包含大约1000万个条目。

有什么想法?数据库正在变得越来越大,所以我们需要关于磁盘空间的事情,但也需要preformens。

2 个答案:

答案 0 :(得分:3)

将日期分成单独表格的驱动因素不应该是存储。这是关于数据模型的问题。正如Gareth指出的那样,内置日期的大小和外键的大小大致相同。

真正的问题是,您是否需要有关日期的更多信息,而这些日期是您无法从内置日期函数中获得的。 MySQL有一组丰富的日期函数,您可以在其中获取星期几,将日期格式化为字符串,提取组件等。此外,内置功能还可以处理比较,差异以及向日期添加“间隔”。

如果这些已足够,则使用内置功能。另一方面,如果您有围绕日期的“业务规则”,那么请考虑另一个表。以下是此类业务规则的示例:

  • 可能是假期的一组特殊日期。或者更糟糕的是,依赖国家的假期。
  • “季度”,“年”,“周年”等特殊业务定义。
  • 需要支持多种日期格式以实现国际化。
  • 有关日期类型的特殊规则,例如“工作日”与“周末”。

日期表只是处理这些问题的一种可能解决方案。但是如果你需要支持这些,那么有一个单独的日期表开始有意义。

答案 1 :(得分:0)

这样做可能没有任何意义,因为存储要求会稍微增加,如果你想开始存储时间,你就会陷入困境。