0

这里的行程 1 在一天内涉及 2 个活动代码,并且在一天内结束,大多数其他活动只是一天,但我有一次行程超过一天。

为该列存储超过一天的日期范围的最佳方法可能是什么。

将列拆分为多个开始日期和结束日期是没有意义的,因为会有很多空白列?

trip_id(pk,fk)  Activity_code(pk,fk)          date
1                     a1                     1st October 2015
1                     a2                     1st October 2015
2                     a3                     2nd -5th October 2015

请记住,我需要按月搜索活动代码。例如列出 10 月份发生的所有活动代码?

是否可以在单个列或任何其他设计解决方案中插入日期范围?

是否有任何数据类型可以表示单个值的日期范围?

PS:oracle 11g e

4

2 回答 2

1

将日期拆分为开始日期和结束日期将是理想的。不建议将日期存储为字符串。如果您将日期存储为字符串,则可能会在列中存储格式错误的数据,因为 VARCHAR2 列将允许任何值。在插入不必要的数据时,您必须在脚本中构建强大的验证。

其次,如果 start_date 和 end_date 都存储在同一列中,您将无法轻松执行简单的操作,例如计算行程的持续时间/长度。如果它们存储在不同的列中,它会很简单

SELECT trip_id, activity_code, end_date - start_date FROM trips;
于 2016-04-28T03:34:19.840 回答
1

将日期范围存储为FirstDate/LastDateFirstDate/ Duration

这允许您以本机格式存储日期的值。将日期存储为字符串是一个坏主意,因为字符串没有为原生日期类型提供的所有内置功能。

不要担心第二个日期或持续时间的额外存储空间。事实上,这两列加在一起可能比将值存储为字符串要小。

于 2016-04-28T02:56:11.387 回答