【问题标题】:MySQL store time conditionsMySQL存储时间条件
【发布时间】:2015-07-02 03:30:22
【问题描述】:

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

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

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

  • 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

等等

这是一种可行的方法,还是我应该以天为单位存储租用时间?

任何帮助、建议、批评或欢呼都是有帮助的!

谢谢。

【问题讨论】:

    标签: mysql structure duration


    【解决方案1】:

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

    将索引存储为逗号分隔的列表也会给您带来问题。我会做一个映射表。该列的格式不正常,很难查询。

    老实说,我会为不同的持续时间制作不同的表格。

    【讨论】:

      【解决方案2】:

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

      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`
      

      您可以使用以下查询找到所有“1 天”(Ian) 租赁类型:

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

      使用时间戳的好处是您可以非常精确地设置租赁的开始和结束时间。您可以检查客户返还对象时为时已晚的小时数和分钟数。然后您可以轻松计算出确切的附加费用。

      【讨论】:

      • 嘿,谢谢这个存储时间数据的好例子。在我的情况下,我将不得不添加 Aaron 的建议映射表,以额外检查是否允许该人想要租用的日期(或不同的价格模型)。 “预订”租赁的用例比几天要复杂一些。也有租期=2天这样的条件,但是开始日必须是星期六,所以只在周末租。到目前为止谢谢!
      猜你喜欢
      • 2016-04-11
      • 1970-01-01
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多