酒店预订系统的数据库设计

时间:2012-02-15 02:08:52

标签: mysql database database-design

我想为酒店预订系统设计一个数据库结构。

我的架构:

client (
  client_id, 
  lastname
)

reservation (
  reservation_id, 
  client_id,
  checkIndate,
  roomno
)

我的问题出在办理登机手续的部分。我已经预订了;我还需要创建一个签入表吗?如果是这样,它的架构应该是什么?

客户可以通过两种方式进入酒店:

  1. 预订(在抵达前预订房间)或
  2. by checkIn(无保留地前往酒店)
  3. 如何存储在酒店登记入的记录?

2 个答案:

答案 0 :(得分:4)

只是几个想法。我注意到“roomno”是“预订”表中的一个字段。我假设您还有一个“房间”表,其中有“roomno”作为其主键以及您可能在房间内跟踪的任何其他数据(phone_number,number_of_beds等等)。

我会做的是创建一个名为“占用”的表。该表将有三个字段“client_id”,“roomno”和checkin_time。 “client_id”和“roomno”都是外键(分别对应客户端和房间表)。为了确保唯一性,我将它们连接起来制作主键(毕竟,你可以让一个客户购买两个房间)。

当客户端结账时,您将从“占用”表中删除该行。你想要将该行存档在另一个表(“历史”,“pastStays”......类似的东西)中,你还要记录“checkout_time”。

就我所建议或假设的变化而言,以下是他们的看法:

table: Room
roomno INT
phone_number INT
number_of_beds INT
smoking_allowed BOOLEAN

table: Occupancy
client_id BIGINT (FK referencing Client) (part of PK)
roomno INT (FK referencing Room) (part of PK)
checkin_time DATETIME

table: pastStays
client_id BIGINT (FK referencing Client) (part of PK)
roomno INT (FK referencing Room) (part of PK)
checkin_time DATETIME
checkout_time DATETIME

答案 1 :(得分:0)

我认为最好将预订与办理登机手续分开。也可以通过第三方预订系统(分配给他们的房间块)进行预订。单人预订也可以为多位客人预订,但单人入住则需支付。此外,您可能需要单独的roomBooking表 - 每个房间一个入口。对于单次入住的客人,通常也可以使用多个房间(持续时间不同)。因此,从入住率解除登记入住可能是有用的。此外,您可能需要单独保留库存(房间可用性)。这意味着以下表格。

预订(id,reserverId,fromDate,toDate) - 每个保留请求一个条目

RoomBooking(id,resId,roomNo,fromDate,toDate) - 每次预订每个房间一个条目

签到(id,resId,guestId,checkInDate,checkOutDate) - 每位客人一个条目

Occupancies(id,checkInId,fromDate,toDate) - 每个房间一个条目指定的持续时间(这类似于房间预订,但这是实际的,RoomBooking是按计划的)