【发布时间】:2017-05-31 05:24:30
【问题描述】:
我想讨论在数据库中存储日期期间的“最佳”方式。让我们谈谈 SQL/MySQL,但这个问题可能适用于任何数据库。我有一种感觉,我多年来一直在做错事......
在英文中,我掌握的信息是:
-In year 2014, value is 1000
-In year 2015, value is 2000
-In year 2016, there is no value
-In year 2017 (and go on), value is 3000
有人可能存储为:
BeginDate EndDate Value
2014-01-01 2014-12-31 1000
2015-01-01 2015-12-31 2000
2017-01-01 NULL 3000
其他人可能存储为:
Date Value
2014-01-01 1000
2015-01-01 2000
2016-01-01 NULL
2017-01-01 3000
- 第一种方法验证规则看起来像是为了避免漏洞和重叠而开发的混乱。
- 在第二种方法中,问题似乎过滤了句号内的一个准时日期。
我的同事喜欢什么?还有什么建议吗?
编辑:我仅以全年为例,我的数据通常会随着日粒度而变化。
编辑 2: 我考虑过使用存储的“日期”作为“开始日期”,按日期对行进行排序,然后在下一个(或上一个)行中选择“结束日期”。作为方法一,存储“BeginDate”和“Interval”会导致孔/重叠问题,我需要一个复杂的验证规则来避免。
【问题讨论】:
-
您只能存储年份,例如
2015,2016等 -
如果你需要存储的信息只是一年,为什么不直接用一个整数来存储年份和值字段呢?始终保持简单。
-
两种方法都可以接受 - 正如 Sadikhasan 的建议(并得到 Jorge Campos 的回应)
-
我仅以全年为例,我的数据通常以天为单位变化。