预订应用程序的数据库设计,例如酒店
我已经建造了一个,但是我确信这是错误的。
我有一个用于查询客户详细信息的表,另一个有每个停留日期的表(即一个星期的假期有七个记录)。
有没有更好的办法?
我用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一起使用以显示预订信息。这样检查日期是否可用比较容易(至少在尝试之后),因此我选择了日期。但是我坚信这不是最好的方法,这就是为什么我问这个问题。
还要感谢数据库答案链接。
最好,
段落数量不匹配