存储多个日期范围

时间:2014-03-28 11:50:43

标签: mysql database datetime database-design

因此,我正在开发一个拼车系统,用户可以提交他们可以提供电梯的日期,或者他们想要升降机的时间。

表单本身将使用虚拟日历,用户可以通过单击日历来选择日期,或者通过按住Shift键单击选择日期范围。他们也可以选择多种类型的选择,IE可以使用一系列日期,然后包括一两个明显不属于该范围的日期。

将为这些日期生成的格式如下:

  

标准日期:yyyy-mm-dd

     

多个日期:

      yyyy-mm-dd,yyyy-mm-dd

     

一系列日期:

      yyyy-mm-dd - yyyy-mm-dd

     

多个日期范围:

      yyyy-mm-dd - yyyy-mm-dd,yyyy-mm-dd - yyyy-mm-dd

     

混合物:

      yyyy-mm-dd - yyyy-mm-dd,yyyy-mm-dd

现在我对将其存储到数据库中的最佳方式感到好奇。是否可以将所有这些信息存储到某种/某种日期的某个日期数组中。或者它应该为每个范围创建多个实例吗?

如果我向你展示我对表格的想法,可能会更好:

如果用户(id = 1)想要提供2014-04-01 - 2014-04-06以及2014-04-09 - 2014-04-11的升降机,数据库此刻将执行以下操作:

  id  userid startDate  EndDate
 ---- ------ ---------- ----------
    1     1  2014-04-01 2014-04-06
    2     1  2014-04-09 2014-04-11

或者它应该是使用多个表格还是作为多个单独日期的数组而不是范围?

重要的原因是因为当有人搜索提供升降机的人时,他们显然希望有时会看到该人提供的所有可用升降机,因此,如果用户提交了升降机,是否应将其显示为一条记录作为一个"提供"。

日期将由json生成并通过php-> pdo插入数据库。数据库是mysql。

另请注意,请求表将包含的数据多于显示的数据,但这只是必需的内容。主要问题是我不想在多个日期范围内到处重复数据。

对不起,如果我没有足够好地解释这一点,那么理解这个想法会非常复杂。

感谢您的时间。 安迪。

3 个答案:

答案 0 :(得分:1)

我现在不记得原因,但是当我在交易系统上工作时,我们还必须将交易头寸随时间推移到类似的日期结构中,以便可以轻松查询它们以进行报告。我们会有这样的结构:

  id  userid startDate  EndDate
 ---- ------ ---------- ----------
    1     1  2014-04-01 2014-04-06
    2     1  2014-04-06 2014-04-09
    3     1  2014-04-09 2014-04-11
    4     1  2014-04-11 null

我不记得我们现在这样做的确切原因,但它与快速轻松地恢复所有位置数据有关。

答案 1 :(得分:1)

我同意I.K。

解决您的一些其他问题:

  

或者它应该是使用多个表还是作为数组的东西   许多个别日期而不是范围?

将每个日期存储在该范围内是个坏主意。它不仅会快速填满您的数据库,还需要插入大量操作,并且修改起来比较复杂(例如,如果用户想要缩小范围)。

关于'单日期'。我仍然将它存储为范围。你可以按照I.K.的建议废除结束日期,但我宁愿只有一个日期范围,例如

id  userid startDate  EndDate
--- ------ ---------- --------
4   1      2014-04-11 2014-04-11

从编码的角度来看,它更加一致,并且意味着您不必处理特殊情况'在结束日期为null时在代码中。这也意味着可以为开放式'保留空值。范围,如果需要(当然,这是特殊情况!)。

我还假设你在数据库中使用了正确的日期类型,而不是存储为字符串:)

答案 2 :(得分:0)

  

我无法记住我们现在这样做的确切原因,但确实如此   与快速恢复所有位置数据有关   容易。

再详细说明一下。当您对表进行非规范化并使用"日期"时,您将获得一些性能。作为数据类型,因为您避免了至少两个连接。但它总是取决于各种各样的环境,例如,如果你更喜欢性能而不是重复数据删除,反之亦然。