簡體   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