我们正在开发带有假日套餐的MySQL数据库(带前端和后端)。除了存储旅行套餐出发日期的最佳方法之外,我们已经找到了一切。
有些套餐几乎每天都有 ;其他只在周二和周三提供;其他人在五月到九月的每个星期一离开;其他套餐一年中只有几个具体日期;等等...
我们需要将每次旅行与适当的出发日期相关联。然后,我们需要执行“给我那些在日期X上可用的软件包”类型的查询,“给我一些我可以在一月的第一周拿到的软件包”,“给我那些日期X和Y之间的旅行“等等。
这样做的简单方法是每天按位存储365位。但就存储空间而言,这显然不是一个好的解决方案。保持日期范围将是一个很好的解决方案,因为大多数软件包仅在一周中的某些日期可用,因此无法在范围内进行最佳编码。
任何人都可以帮助我们解决这个问题吗?我们如何将旅游出发日期保留在数据库中?
非常感谢!
Ramon的
答案 0 :(得分:2)
由于您需要执行查找确切日期的查询,我猜您需要存储确切的日期。文本信息(“周一”,“冬季周四和周五”......)也应存储,但仅用于提供信息(例如,在旅游信息页面中显示)。
至于日期,您有两种选择:
1)个人日期
tour_id date
======= ==========
1 2010-12-01
1 2010-12-02
1 2010-12-05
2 2010-01-15
2)日期范围:
tour_id from_date to_date
======= ========== ==========
1 2010-12-01 2010-12-05
2 2010-01-15 2010-01-15
我认为#1更容易维护。
答案 1 :(得分:1)
这是我建议的格式。
将您的可用日期存储在单独的表中作为间隔(开始日期,结束日期)。优惠将有一个或多个间隔。对于每个间隔,为一周中可用的日期定义一个7位限制过滤器(默认将所有位设置为1)。如果您只需要一个日期,则可以选择Start = End。当然,这个模型并没有涵盖所有情况,但对我来说似乎已经足够了,如果你有很多优惠仅在一周的某些日子有效,它可能会很有用。
您可能还想从您的间隔中排除某些日期。为此,您需要另一张桌子存放个人日子。
示例:
id | start | end | week_days
1 | 2011-01-01 | 2011-03-31 | 1111100 - The offer is available in any weekday from January to March
2 | 2011-01-31 | 2011-01-31 | 1111111 - An offer available just in one day
如果您想使用例外,那么您可以使商品#1无效,因为您添加了商品#2:
id | id_period | date
1 | 1 | 2011-01-31
答案 2 :(得分:0)
除了在此数据库中显示日期之外,您是否会做任何事情,例如预订?因为那将强烈指向比逐位解决方案更进一步:每个出发日期有一条记录。
存储空间问题应该是无关紧要的,除非您有数万亿的旅行,这是不太可能的。但是查询日期,构建完全不规则的间隔以及取消范围内的选择日期变得非常容易。
这方面的难点在于编辑。创建新游览时,您必须根据指定的间隔创建日期记录。如果间隔稍后更改,则必须回滚创建。