数据库 - 日期 - 多列还是一列?

时间:2013-05-19 23:50:34

标签: sql sql-server

我正在开发一个数据库,可以看到该表设置了多个列(日,月,年)而不是一个日期列。 我想我应该把它转换成一个,但是想检查它是否有多重要点。

我正在重写网站,所以无论如何我都在更新处理它的代码,但我很好奇是否有这样的优势?

它唯一被用来比较数据,比较所有列,我认为整数比较可能比日期比较更快。

4 个答案:

答案 0 :(得分:4)

将它们合并为一个列 - 单个日期的索引将比3个整数的复合索引更紧凑(因此更高效)。您还将受益于DBMS提供的类型安全和日期相关功能。

即使您想要查询一年中的某个月或某一天的日期(根据您的描述判断似乎并非如此),也无需将它们分开 - 只需创建适当的计算列和intex 他们

答案 1 :(得分:3)

日期列对时态数据有意义,因为它符合目的。

但是,如果您有一个特定的用例,您经常比较月份数据而不是使用完整日期,那么有一点优势 - 正如您所提到的 - int列更精简存储到索引页面并更快地匹配。

缺点是有3个独立的int列,日期验证几乎是一个前端事件,而不需要在SQL Server端进行额外的编码。

答案 2 :(得分:3)

通常,单个日期字段是理想的,因为它允许更有效的比较,低级别的有效性检查和数据库端日期数学函数。

分离组件的唯一重要优势是经常需要一天或一个月的首次搜索(比较)。也许是“在这一天发生的其他事件”。或者是每月预算申请或其他什么。

(即使这样,也可以通过适当的索引有效地使用正确的日期字段。)

答案 3 :(得分:2)

是的,我建议你用一个包含Julian日期的列来替换3列,这是一个浮点数。点之前的部分给出了日期,点之后的部分给出了白天的时间。计算将很容易,您也可以轻松地将Julian转换回月/日/年等。我相信MS Excel会在内部将日期存储为浮点数,这样您就可以很好地合作。