我在建一个房屋租赁系统。该系统存储房屋的配置文件,用户可以预订房屋,租期从一天到一年不等。我已经有了所有的预订部分设置,除非我面临着客户的要求,能够将某些日期和日期范围设置为不可预订的家庭。
一所房子可以租一整年,也可以租6个月,或者在特殊的日子里不能租,例如:假日和周末的夏季房屋等。
我很困惑,因为考虑到信息必须可以通过sql查询检索,我如何才能设置一个数据库表来存储这些信息。我的意思是,考虑以下情况,除了星期三、7月4日、11月10日至12月25日和12月31日外,一所房屋全年都可以出租。
如何将其存储在数据库中,并能够运行查询以检查设置日期之间的房屋可用性。我在php MySql中唤醒
发布于 2011-01-27 21:53:37
您正在描述两个不同的概念:“在星期三”与其说是一个日期范围,不如说它是一个循环模式。“周末”也是如此。
除了定义这些不可用日期的属性表之外,您可能还在查看两个不同的表:一个表示特定的日期范围,另一个表示重复模式。
Property
|
-------------- ---------------
| |
PropertyUnavailableRecurrence PropertyUnavailableRange (请记住,您可能想要找出较短的名称)
PropertyUnavailableRecurrence需要存储将“星期三”和“周末”转变为可行的决策逻辑所需的信息。我不能为你们建模,因为你们在这个模式中展示的都是一周中特定的几天,但我想你们需要能够考虑“每月的第一个星期三”或“每月的第二个星期三”,但我不知道。在任何情况下,这都是您需要存储信息的地方。
PropertyUnavailableRange将只包含定义范围的简单From和To日期。这一部分非常简单。
当然,另一种方法是采用应用程序中指定的重复模式,并将它们转换为谨慎的PropertyUnavailableRange记录,但您仍然需要设置一个表来存储这些重复记录,并将这些重复记录与重复记录相关联,以便您可以对其进行管理。
发布于 2011-01-27 22:54:30
一种方法是使用具有以下结构的表PropertyUnavailable:
create table PropertyUnavailable
(
property_id number not null,
when date not null
);对于由于停电期间(例如,每个星期三、假日等)而不可用的每一天,该表将具有一行。我忽略了您将如何存储模式的元信息--此表所需的只是由于封锁期而属性不可用的每一天的行。
我假设您还会有一个用于预约天数的表PropertyReserved,其结构与上面相同,外键为reservation_id (或类似的外键)。
现在,要查看给定日期范围内哪些日期不可用/保留,sql将如下所示:
SELECT a.when, 'blackout'
FROM PropertyUnavailable a
WHERE a.when between <from_date> to <to_date>
UNION ALL (
SELECT b.when, 'reserved'
FROM PropertyReserved b
WHERE b.when between <from_date> to <to_date>
);如果查询没有返回任何内容,则该属性在指定的日期范围(from_date、to_date)之间可用。
发布于 2011-01-28 03:34:12
你有没有考虑过简单地以系统的名义预订那些“无法预订”的日期?
https://stackoverflow.com/questions/4817095
复制相似问题