2015-10-14 76 views
0

假設我:多個酒店和多個房間的數據庫設計?

  1. 擁有多個酒店(比如說,3)
  2. 要爲自己在這些酒店房間的數據庫。

所以我在我的數據庫中的兩個表:酒店和房間。

這個酒店表:(業主#1就是我)

Hotel_ID(primary) | Hotel_Name | Owner_ID | Star |Phone | Info | 
1      Java   1  3  ..  .. 
2     Borobudur  1  5  ..  .. 
3      Asia   1  1  ..  .. 
4     Wijaya   2  3  ..  .. 

因此,表空間,(我相信)會變成這個樣子:

Hotel_ID | Room_Number | Capacity | Status | Price_perNight | 
    1   1    4   Vacant   5 
    1   2    4   Vacant   5 
    1   3    3  Occupied   4 
    2   1    4   Vacant   4 
    2   2    4  Occupied   4 
    3   1    3  Occupied   1 
    ..  ..   ..   ..    .. 

Q : 1.此方法是否有效? (房間表沒有任何主鍵,也不需要)

  1. 有沒有更好的設計?

在此先感謝。

+1

至少應該有酒店,房間和入住的桌子。 –

+0

感謝您的快速評論,我有酒店和房間的表格。我真的不需要有關佔用的信息 - >兩張桌子「健康」之間的關係? - >所有酒店中的所有房間都在一張桌子上 –

+1

此設計只會爲您提供當前入住時間的快照。它不會讓你處理未來的預訂(但這可能是你想要的)。 – user2867342

回答

3

room表沒有任何主鍵,並且不需要任何

假設會有其他表,如reservationoccupancy引用在room表中的行,你確實需要一個主鍵。 room表確實有一個很好的主鍵候選 - 複合鍵(Hotel_ID, Room_Number)。引用一個房間的其他表將能夠存儲Hotel_IDRoom_Number,以確定被保留了房間。

有沒有更好的設計?

你會過得更好提供Room_ID相反,這可能在room表,或只能在同一Hotel_ID,這將讓是唯一的你獨立於Room_ID的改變Room_Number

例如,假設你的酒店之一,有三層樓。房間1,圖2,和圖3是在第一地板,房間4,5,6,和圖7是在第二層,和房間8,9,10,和11是在第三層。如果您決定重新編號房間如下

floor old new 
----- --- --- 
    1 1 101 
    1 2 102 
    1 3 103 
    2 4 201 
    2 5 202 
    2 6 203 
    2 7 204 
    3 8 301 
    3 9 302 
    3 10 303 
    3 11 304 

表設計Room_ID將讓你這樣做很容易,而當前的設計會給你很難修復現有的數據。

0

它看起來像一個簡單的一個酒店和房間之間的多對多關係

室的桌子上已經有一個主鍵(組合鍵),如果你把(HOTEL_ID,Room_Number)考慮

順便說一句,你可以如果只給房間一個ID(主鍵),請避免使用複合鍵

0

如已經提到的,Room_ID + Room_Number標識了一個房間,所以這將是一個很好的主鍵。 (您的可能會添加一個技術ID,並且您可以將其作爲主鍵,但請記住這是額外的,您仍然會在Hotel_ID + Room_Number上創建唯一約束)。

至於設計表格,想想實體。每個房間都有自己的價格嗎?通常不會。你寧願有類別,說酒店的「基本」,「優雅」,「豪華」,這些都有價格。一旦奢侈品價格發生變化,所有豪華客房的價格都會相同。這甚至可能與季節相結合。

其他人已經提到,你也應該有職業或預訂表。否則:你怎麼知道什麼時候有空房?