数据库
首页 > 数据库> > mysql-如何根据天数或月数来管理房间的可用性

mysql-如何根据天数或月数来管理房间的可用性

作者:互联网

我正在开发一个Rails 3应用程序(以MySQL作为RDMS)来管理某些房间的可用性/占用率(这是一个类似酒店的应用程序)
就我而言,问题在于我必须保持系统2种不同的要求,因为可以租用一间客房:

>一些月份(例如6个月)
>某些天/周/周末

显然,该应用必须在给定的日期显示每个房间的是否可用以及是否正在出租.另一方面,一个用户可以在一个房间中搜索给定的日期范围.
日期范围可以是某个固定日期,也可以是某个月范围(例如,从9月到3月),我知道这与数据库的设计无关,但是我要记住.

为了使该系统高效运行,我想通过参考Room和一个365个元素的数组(表示1年)来创建一个表YEAR组合,当每个元素可以为0或1时(0表示可用,而1表示)意味着租.

采用这种解决方案,我将不得不面对一些问题:

>当用户在几个月内搜索房间时,返回非常快速的结果.
>管理“跨年”范围(例如,从2012年12月20日到2013年1月13日)
> years年

最后,我想避免使用SQL过程或午夜过程(如果可能)

我确定有更好的方法可以在SQL中设计此问题…
你们中的一些可以帮助我吗?或给我一些提示?

解决方法:

保留具有开始日期和结束日期的房间预订列表.不要尝试对可用性插槽进行建模,也不要像预订电子表格那样来考虑预订数据库.这只会导致您毫无意义的复杂性.日期范围易于使用.

要知道的最重要的事情是如何在查询中检测重叠的日期范围.这是测试房间是否已预订或是否空闲的基础.假设您有一个RESERVATION表,并且想要查找与给定日期范围重叠的预订:@FromDate和@ToDate.用于查找重叠保留的WHERE子句如下所示:

WHERE RESERVATION.start_date < @ToDate 
  AND RESERVATION.end_date > @FromDate

可用房间不会有冲突(即WHERE NOT IN …),而可用房间则会有冲突.

标签:activerecord,mysql,database-design,ruby-on-rails-3-1
来源: https://codeday.me/bug/20191014/1912233.html