预订应用程序的数据库设计,例如酒店

时间:2020-03-05 18:54:39  来源:igfitidea点击:

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

我有一个用于查询客户详细信息的表,另一个有每个停留日期的表(即一个星期的假期有七个记录)。

有没有更好的办法?

我用MySQL用PHP编写代码

解决方案

回答

怎么了记录客户停留的每个日期,可以得到我想象中相当标准的报告,例如能够显示任何给定日期的预订房间数。

回答

干得好

我在此页面上找到它:

免费数据库模型列表。

回答

警告:目前(11月11日),Google报告该网站包含恶意软件:http://safebrowsing.clients.google.com/safebrowsing/diagnostic?client=Firefox&hl=zh-CN&site=http://www.databaseanswers。 org / data_models / hotels / hotel_reservations_popkin.htm

回答

答案在很大程度上取决于要求...但是我希望只存储其停留起始日期和结束日期的记录。如果我们进一步解释问题,我们可以为我们提供更多详细信息。

  • 我们每天住宿需要记录吗?
  • 我们不仅可以为住宿准备一张桌子,还可以有一个到达日期,以及多个晚上或者一个离开日期?
  • 是否存在与一位客户的住宿有关的每日特定数据?

回答

我们需要问自己一些问题:

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

回答

我认为每天元组有点过大。在" stay"表上的几列就足够了。

是否需要为一个人每天留下的记录创建记录?仅在每天都很重要的情况下才应该是必需的,否则应具有一个包含客户详细信息的"客户/来宾"表,一个包含来宾预订的"预订"表。预订表将包含房间,开始日期,结束日期,客人(或者多个客人)等。

回答

如果我们需要记录其他事物,例如付费活动或者进餐,请根据需要将其添加到其他表中。

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

一般来说,如果需要检查给定日期有多少客户,可以使用存储过程进行检查。

对于某些特定的操作,设计可能会很好。即使是这种情况,我仍然会保留一个"访问"表,该表将客户链接到一个唯一的逗留期间,还有一个"访问天数"表,在该表中,我可以将每个客户的逗留期间解析为几天。

回答

阿萨夫

我们正在通过查询简单性(可能还有性能)来权衡数据库大小

我们当前的模型提供了简单的查询,因为它很容易查询来宾数量,第n晚X室的空位等,但数据库大小将迅速增加。

转向开始/停止或者开始/夜数模型有时会产生一些有趣的查询:)

回答

因此,很多选择与SQL技能水平有关:)

  • 少于1天的住宿(例如,在某些商务酒店中,短暂的中午住宿很普遍)
  • 延迟退房/提早入住。如果仅测量夜晚而不是日期/时间,则可能很难安排这些时间,或者看到潜在的冲突。我们的一位客户希望有四个小时的时间间隔,而并非总是上午10点至下午2点。

回答

有些事情可能会破坏模型。这些可能不是问题,但是我们应该与客户联系以查看是否可能发生。

我不在乎图中的架构。真丑。

架构摘要

表:访问

"访问"表包含每天在酒店住宿的一行。

  • ixVisit
  • ixCusomer
  • dt
  • 注意

注意:访问包含

  • ixCustomer
  • sFirstName
  • 姓氏

表:客户

表:住宿

  • ixStay
  • dtArrive
  • dtLeave
  • 注意

停留表包括一行,描述了整个访问。每当访问被覆盖时,它都会更新。

笔记

Web应用程序有两件事:SELECT操作和CRUD操作。大多数网络应用的SELECT比例为99%,CRUD比例为1%。规范化对CRUD的帮助远大于SELECT。我们可能会看一下我的架构和恐慌,但这很快。对于任何CRUD活动,我们都将需要做少量的额外工作,但是SELECTS将会如此之快,因为所有SELECTS都可以进入Stay表。

我喜欢杰夫·阿特伍德(Jeff Atwood)所说的话:"归一化直到痛苦,反归一化直到起作用"

回答

对于繁忙的酒店经理使用的网站,其运行效果与运行速度同样重要。

我从事旅游行业,并曾从事过许多不同的PMS。我设计的最后一个方法是按每位客人每晚的行数进行操作,这是我遇到的最好的方法。
在该行业中,经常有每晚住宿的特定信息。例如,我们需要在预订时知道每晚住宿的房价。客人还可以在住宿期间移动房间。

在性能方面,与MySQL中的范围相比,执行相等查询要快得多,因此startdate / enddate方法会更慢。要查找日期范围,请执行"(日期)中的日期"。

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

BookingGuests (id, guest-id)

BookingGuestNights (date, room, rate)

回答

我使用的模式大致是:

哇,谢谢你的回答。

我对模式进行了漫长而艰辛的思考,在尝试了另一种方法并且难以转换为html后,采用了record = night方法。

我将CodeIgniter与内置的Calendar Class一起使用以显示预订信息。这样检查日期是否可用比较容易(至少在尝试之后),因此我选择了日期。但是我坚信这不是最好的方法,这就是为什么我问这个问题。

还要感谢数据库答案链接。

最好,

段落数量不匹配