所以我正在开发一个拼车系统,用户可以提交他们可以提供搭便车的日期,或者他们想要搭便车的时间。
表单本身将使用一个虚拟日历,用户可以通过单击日期来选择日期,或者通过shift-click来选择日期范围。他们还可以选择多种类型的选择,即他们可以使用一系列日期,然后包括一两个明显不在该范围内的日期。
这些日期将产生的格式如下:
标准日期: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
还要注意,请求的表将保存比显示的数据更多的数据,但这只是这里所需要的。主要问题是我不希望在多个日期范围内到处重复数据。
如果我解释得不够好,我很抱歉,要理解这个想法是相当复杂的。
谢谢你的时间。安迪。
我现在不记得原因了,但当我在一个交易系统工作时,我们还必须将交易头寸随时间的变化放在一个类似的日期结构中,以便可以轻松地查询它们以进行报告。我们会有这样的结构:
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
我不记得我们现在这么做的确切原因了,但这与快速轻松地获取所有位置数据有关。
我同意I.K.的观点
回答你的一些附加问题:
或者应该是使用多个表或作为数组的东西许多单独的日期,而不是一个范围?
存储该范围内的每个日期是一个坏主意。它不仅会快速填满你的数据库,而且需要大量的操作来插入,并且更复杂的修改(例如,如果用户想要减少范围)。
关于"单身日期"。我还是会把它存储为一个值域。你可以像i.k.建议的那样,把结束日期空掉,但我宁愿只有一天的范围,例如
id userid startDate EndDate
--- ------ ---------- --------
4 1 2014-04-11 2014-04-11
从编码的角度来看,它更一致,并且意味着当结束日期为空时,您不必处理代码中的"特殊情况"。这也意味着如果需要,null值可以保留给"开放结束"的范围(当然,这是一种特殊情况!)。
我还假设您在数据库中使用适当的日期类型,而不是存储为字符串:)
我不记得我们现在做这件事的确切原因,但它是一些与快速获取所有位置数据有关的东西容易。
我再详细说明一下。当您对表进行非规范化并使用"Date"作为数据类型时,您将获得一些性能,因为您避免了至少两个连接。但它总是取决于各种情况,例如,如果您更喜欢性能而不是重复数据删除,反之亦然。