按月-年关键面值存储日期的最佳实践

ado*_*lot 6 sql-server-2008 database-design datatypes date-format

我正在制作一项需要保存按年月组合分组和计算的数据的服务。我知道如何计算数据并将其放在新表上。但是我很困惑应该使用哪种数据类型来存储月 - 年值。这是我所考虑的。

  1. 两个整数列,一个为一年,另一个为一个月(清晰易懂且易于操作(使用此表的任何人都可以轻松使用范围和顺序),但我认为这比其他解决方案占用更多空间。
  2. 使用日期字段,并始终为整个月存储一个日期。(很难向用户解释它是如何工作的以及如何创建 WHERE 子句)
  3. 一个 varchar(7) 列并将其放在那里,例如 2012-02,2013-01。对我来说,这很容易理解,但很难操作。

我应该选哪个?或者有其他解决方案。有人可以根据性能建议哪种方式将是一个好的解决方案,因为大多数查询将在 where 解决方案中使用数据范围,而我的新表将有大约 2-5 百万条记录。

gbn*_*gbn 9

我会使用带有一个月第一天的日期字段和一个 CHECK 约束来确保它保持在第 1 天。

这使其保持本机日期/时间格式(这是您对选项 3 的观察)

选项 1 需要较少的存储空间,但会使比较复杂化。500 万行并不多:您使用的存储空间更少,但会增加代码和查询的复杂性