3

我即将设计一个酒店预订系统。

每个酒店都分配了一些房间类型。

RoomType: id | name | hotel_id

date_from每家酒店都为特定时期(给定和date_to)提供一定数量的 RoomType 。date_from此外,每个客户都可以在指定时期(和date_to)内预订一定数量的某些房间类型。

我需要能够找到并显示给定酒店的可用优惠,了解每天每种 RoomType 的免费(提供 - 预订)房间数量,查询免费房间的最低数量等。

我想请教一下,我应该如何保存数据。什么解决方案是最优的?我知道除非我使用存储过程,否则使用简单的 SQL 查询无法实现某些查询(例如,显示给定范围内每天给定类型的空闲房间数)。但是,我想让它尽可能快速和易于实施。

到目前为止,我已经考虑过:

  1. RoomOffer: hotel_id | date_from | date_to | quantity | room_type_id与预订保持一致

  2. RoomOffer: hotel_id | date | quantity | room_type_idReservation 相同 - 即在创建 RoomOffer / Reservation 时,为给定范围内的每一天创建单个记录。

有什么建议吗?

4

1 回答 1

1

我假设它RoomType指的是一个房间,并且每个房间的主键是 tuple (hotel_id, room_type_id),因为您将这两个字段都用于RoomOffer.

但是,我不建议您采用RoomOfferandReservation方法。首先,因为你存储了很多冗余信息:当一个房间还没有被预订时,你需要一个房间报价来说明它是可用的(或者更糟糕的是,因为你按时间范围划分了很多),你已经知道的东西。

取而代之的是,我建议使用与此更相似的设计:

预订系统UML

从你的问题我知道你很关心系统的性能,但通常这种在设计阶段的优化并不是一个好主意。这样做可能会导致大量冗余数据和耦合类。但是,您可以使用索引甚至使用非 SQL 方法来提高数据库查询的性能。您可以在项目的后期阶段更好地评估这一点。

于 2013-02-15T14:17:16.833 回答