Database-Design
酒店預訂數據庫設計
我正在建立一家線上旅行社,我對數據庫設計感到擔憂。假設使用者將有兩種類型:
- 標準(希望預訂酒店的使用者)和
- 酒店。顯然,標準使用者將比酒店使用者多得多(假設 1:50)。
現在,除了標準的使用者數據(
user_id
、password
等),酒店還有hotel_id
、hotel name
、city
、country
、location_geo
、images
和其他一些欄位。我關心的是酒店是否應該是一個單獨的表。IMO,擁有一個單獨的酒店表在性能方面會更好,因為:
- 酒店將成為該網站的主要“吸引力”,即酒店將被閱讀最多,並且對數據庫的需求最大。因此,IMO,明智的做法是有一個單獨的酒店表,這樣可以查看更少的數據,從而更快地提供數據。例如,如果我想獲得一個使用者,如果你必須查看 1000 行(酒店)比 50,000 行(使用者)更快
- 如果我添加特定於酒店的欄位(hotel_id、酒店名稱等),這些欄位中的大部分都是空的(因為標準使用者不需要它們),從而增加了數據庫的負載。
您認為正確的解決方案應該是什麼?
這取決於您使用的數據庫。 空數據欄位對大多數數據庫的訪問速度沒有影響。
- 您確實需要將附加
Hotel
欄位預設為Null- 不執行
select *
- 不要使用固定長度的列
另一方面,我的經驗是,隨著時間的推移,您最終可能會在
hotel
記錄中添加越來越多的欄位。在這種情況下,現在將它們分開可能是值得的。有關索引的更多資訊,請查看此連結深入了解數據庫索引和SQL 伺服器索引。
簡單地說,索引儲存在頁面中,頁面記憶體在記憶體中。索引位於某種二叉樹中。用於搜尋的深度或頁面數量會影響獲取速度。索引良好的表不會顯示成百上千條記錄的顯著減速。百萬,也許是另一個故事。