预订应用的数据库设计,例如旅馆

时间:2008-09-15 21:57:31

标签: php mysql

我已经建了一个,但我确信这是错的。

我有一张关于客户详细信息的表格,另一张表格中列有每个日期(即一周的假期将有7条记录)。

有更好的方法吗?

我使用MySQL编写PHP代码

12 个答案:

答案 0 :(得分:6)

答案 1 :(得分:3)

我在旅游行业工作,并参与了许多不同的PMS。我设计的最后一个有每位客人每晚行的方法,这是我遇到的最好的方法。 在这个行业中,每天晚上都有特定的信息。例如,您需要知道预订时每晚住宿的房价。客人也可以在逗留期间移动房间。

性能方面,在MySQL中执行等于查找比使用范围更快,因此startdate / enddate方法会更慢。要查找一系列日期,请执行“日期(日期)”。

我使用的架构大致是:

Bookings (id, main-guest-id, arrivaltime, departime,...)

BookingGuests (id, guest-id)

BookingGuestNights (date, room, rate)

答案 2 :(得分:1)

您需要问自己一些问题:

  • 您是否有理由需要每天入住的记录?
  • 你能不能只留一张住宿的桌子,并有抵达日期和一些晚上或出发日期?
  • 是否存在与一个客户住宿相关的日常特定数据?

答案 3 :(得分:1)

可能会破坏您模型的一些事情。这些可能不是问题,但您应该咨询您的客户,看看它们是否可能发生。

  • 不到1天的住宿(例如,在一些商务酒店,短暂的中午住宿很常见)
  • 延迟退房/提早入住。如果您只是测量夜晚,而不是日期/时间,您可能会发现很难安排这些,或者看到潜在的冲突。我们的一位客户想要一个四小时的差距,而不是总是在上午10点到下午2点。

答案 4 :(得分:1)

哇,谢谢你的所有答案。

我对模式进行了长时间的考虑,并且在尝试了另一种方式并且难以转换为html之后采用了record = night方法。

我使用内置日历类的CodeIgniter来显示预订信息。检查日期是否可用这种方式更容易(至少在尝试之后),所以我选择了它。但我确信这不是最好的方式,这就是我提出这个问题的原因。

感谢DB回答链接。

最佳,

答案 5 :(得分:0)

这有什么问题?记录客户留下的每个日期允许我想象的是相当标准的报告,例如能够在任何一天显示预订房间的数量。

答案 6 :(得分:0)

答案在很大程度上取决于您的要求......但我希望只需存储一份记录,其中包含他们逗留的开始和结束日期。如果您更多地解释您的问题,我们可以为您提供更多详细信息。

答案 7 :(得分:0)

我认为每天元组有点矫枉过正。 “停留”表上的几列应该足够了。

stay.check_in_time_scheduled
stay.check_in_time_actual
stay.check_out_time_scheduled
stay.check_out_time_actual

答案 8 :(得分:0)

创建一个人每天都需要的记录吗?只有在每一天都很重要时才应该是必要的,否则有一个客户/访客表来包含客户的详细信息,一个预订表来包含客人的预订。预订表将包含房间,开始日期,结束日期,客人(或客人)等。

如果您需要记录其他内容,例如付费活动或用餐,请根据需要在其他表格中添加。

答案 9 :(得分:0)

减少每次逗留的条目数量的一种可能方法是,存储时间范围,例如:开始日期和结束日期。我需要知道您针对数据运行的操作,以提供更具体的建议。

一般来说,如果您需要检查在给定日期停留的客户数量,您可以使用存储过程执行此操作。

对于某些特定操作,您的设计可能会很好。即使是这种情况,我仍然会有一个“访问”表格,将客户与独特的住宿相关联,以及“访问天数”表格,我会将每个客户的住宿时间解析为当天。

阿萨夫。

答案 10 :(得分:0)

您使用查询简单性(可能还有性能)来折衷数据库大小

您当前的模型提供了简单的查询,因为它很容易查询客人数量,夜间房间X中的空位等等,但数据库大小会相当快地增加。

移动到开始/停止或开始/数字夜晚模型有时会产生一些有趣的查询:)

所以很多选择都与你的SQL技能水平有关:)

答案 11 :(得分:0)

我不关心图中的架构。这很难看。

架构摘要

表:访问

访问表包含每晚住在酒店的一行。

注意:访问包含

  • ixVisit
  • ixCusomer
  • DT
  • S注

表:客户

  • ixCustomer
  • sFirstName
  • sLastName

表:保持

Stay表包含一行描述整个访问的行。它每次访问时都会更新。

  • ixStay
  • dtArrive
  • dtLeave
  • S注

备注

Web应用程序有两个方面:SELECT操作和CRUD操作。大多数网络应用程序是99%SELECT和1%CRUD。规范化往往比SELECT更有助于CRUD。你可能会看我的架构和恐慌,但它很快。你将不得不为任何CRUD活动做一些额外的工作,但你的SELECTS会快得多,因为所有的SELECTS都可以点击Stay表。

我喜欢Jeff Atwood的说法:“正常化直到它受到伤害,反正常化直到它起作用”

对于一个忙碌的酒店经理使用的网站来说,它的运作方式与其运作速度一样重要。