繁体   English   中英

mysql酒店的在线旅行社数据库设计(费率表)

[英]Online travel agent database design (rates table) for hotels in mysql

我已经开发了一个系统,用于使用php和mysql为一家拥有150家左右酒店的旅行社管理酒店价格,分配和预订。 由于酒店房价因日期表而异,大致设计如下

hotel_tbl{
 hotel_id,
 hotel_name
}    

room_type_tbl{
 room_type_id,
 room_type_name,
 hotel_id 
}


room_rates_tbl{
  room_type_id,
  **from_date,
  **till_date,
  meal_basis,//(Breakfast,halfboard,fullboard) BB,HB,FB
  sleeps,//(Single,Double,Triple) SGL,DBL,TPL
  currency,
  room_rate
}

由于酒店价格会随着日期的变化而波动,我在查询表格中进行复杂的旅游套餐计算(涉及多个酒店)时注意到,其性能比预期的要慢。 我的问题是,如果我为每个日期设置一个费率行而不使用日期范围(我的系统包含约150家酒店),您的性能会有所改善吗?如下所示:

room_rates_tbl { // A row for each day as opposed to using a date range
  room_type_id,
  **date,
  meal_basis,//(Breakfast,halfboard,fullboard) BB,HB,FB
  sleeps,//(Single,Double,Triple) SGL,DBL,TPL
  currency,
  room_rate}

希望这个问题足够清楚...

我已经更新了我的问题,使其更加清晰。 房间类型例如是“标准间”或“豪华间”或“家庭间”,“睡眠”将包含其单人,双人等。我已从问题中删除了market_type,因为它与市场组无关(例如国家/地区),税率会降低。 我的问题是,在查询费率表时,存储日期费率比使用日期范围更有效。

假设您的查询针对两个给定日期之间所有酒店的特定房型。 您需要从数据库中获得什么? 我会建议:

  1. 开始日期所有酒店的那种房型价格
  2. 截止日期所有酒店的此类房费

您希望避免进行表扫描,因为这会减慢您对用户的响应。 因此,任何查找都需要使用索引。 由于查询基于日期,因此应该对日期字段建立索引。 因此,如果用户想要在12年12月31日至13年5月1日之间的房间,我们可以对索引使用范围运算符,如http://dev.mysql.com/doc/refman/5.1/en/range中所述-optimization.html#range-access-single-part )。 (如果将日期值存储为时间戳记值,则会减小值的存储大小,这将改善索引的性能。)如果使用原始表架构,则将需要两个索引-一个在开始日期还有一个截止日期-与您建议的经修改的表相比,表中的行要少,它将需要一个索引但需要更多的表行(每天等一则,等等)。变量太大以至于无法暗示哪个会更好。

我认为将日期和费率分成另一个表格会更好。

room_tbl- room_id ,room_type_id,market_type_id和任何房间信息

room_rate_tbl- room_id ,起始日期 ,直到日期,货币,room_rate

这样,您的房间信息是独立的,您可以轻松地将任何房费添加,编辑或删除到特定的room_id。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM