MySQL存储时间条件

时间:2015-04-23 18:55:18

标签: mysql structure duration

我目前正在开发一个平台,我想提供一些租赁服务。

我想在数据库中存储所有可能的租赁类型,因此我不需要在代码中处理逻辑。

基本上我想提供以下租赁时间:

  • 1天
  • 7天
  • 5天/需要平日(这是星期一到 星期五)
  • 2天/周末(需要周六至周日)
  • 1个月/将来自例如在某个月的14个月到下个月的13日

在几天的时间里,我想过以几分钟的速度存储数据,这很容易理解。

如果有我想使用DAYOFWEEK指标的平日条件,所以可以定义为5天,租赁的第一天需要具有索引2,其是星期一,周末我可以定义的租赁需求日索引6,即星期六。

rental_type_id | rental_time_in_minutes | rental_label | rental_start_day_indexes

1天就像

1 | 1440 | 1 day | 1,2,3,4,5,6,7

7天

2 | 10080 | 7 days | 1,2,3,4,5,6,7

5天

3 | 7200 | Weekdays | 2,3,4,5,6

这是一种方法吗,或者我应该在几天内存储租用时间?

任何帮助,建议,评论或欢呼都是有帮助的!

感谢。

2 个答案:

答案 0 :(得分:0)

根据您的使用方式,以几分钟为单位存储租赁时间可能会导致DST周围出现问题,即您每天有23或25个小时。

将索引存储为以逗号分隔的列表也会导致问题。我会制作一张映射表。该列不是正常形式,很难查询。

我会诚实地为不同的持续时间制作不同的表格。

答案 1 :(得分:0)

我会以秒为单位存储持续时间。因为它使整个事情更容易查询和更加灵活。假设您有这些租期。表持续时间:

d_id  type     duration
1     1 day       01
2     3 days      03
3     7 days      07

我建议您使用正常时间戳进行租借。我会存储开始和结束时间戳。假设您有下表。

在这个例子中,我使用天而不是时间戳只是为了让它更容易显示。我们今天说的是第3天。桌子租赁:

customer  start   end
Bob         02      05
Joe         10      11
Ian         03      04

让我们假设您想要获得所有当前活跃的租金(Bob& Ian)。你可以像这样获取它:

SELECT * FROM `rentals` WHERE `start`<3 AND 3<`end`

您可以找到所有租赁类型&#34; 1天&#34; (Ian)使用此查询:

SELECT * FROM `rentals`,`durations` WHERE `end`-`start`=`duration` and `d_id`=1

使用时间戳的优点是您可以非常精确地设置租赁开始和结束时间。您可以通过返回对象来检查客户为时已晚的小时数和分钟数。然后,您可以轻松计算确切的额外费用。