多个酒店和多个房间的数据库设计?

时间:2015-10-14 14:43:03

标签: sql database database-design

假设我:

  1. 拥有多家酒店(比方说3)
  2. 想要建立一个关于这些酒店房间的数据库。
  3. 所以我的数据库里有两张桌子:酒店和房间。

    这是酒店表 :(所有者#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
        ..        ..           ..           ..             ..
    

    问: 这种方法有效吗? (房间表没有任何主键,也不需要任何主键)

    1. 有没有更好的设计?
    2. 提前致谢。

3 个答案:

答案 0 :(得分:3)

  

room表没有任何主键,也不需要任何

假设有其他表(例如reservationoccupancy引用room表中的行,则需要主键。 room表确实有一个很好的主键候选 - 复合键(Hotel_ID, Room_Number)。引用房间的其他表格可以存储Hotel_IDRoom_Number,以便识别要保留的房间。

  

有没有更好的设计?

您最好提供Room_ID,这可能在room表中是唯一的,或者只能在同一Hotel_ID内,这样您就可以更改Room_Number独立于Room_ID

例如,假设您的一家酒店有三层楼。 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的表格设计可以让您轻松完成,而您当前的设计可以让您很难修复现有数据。

答案 1 :(得分:0)

它看起来像酒店和房间之间的一对多关系

如果考虑(Hotel_ID,Room_Number),

房间表已经有一个主键(复合键)

顺便说一句,如果只给房间一个id(主键),你可以完全避免使用复合键

答案 2 :(得分:0)

如上所述,房间由Hotel_ID + Room_Number标识,因此这将成为一个很好的主键。 (你可以添加一个技术ID,你可以将它作为主键,但请记住这是额外的,你仍然会在Hotel_ID + Room_Number上创建一个唯一的约束。

关于设计表,请考虑实体。每个房间都有自己的价格吗?通常不是。你宁愿为酒店提供类别,说“基本”,“优雅”,“奢侈”,这些都有价格。一旦奢侈品价格发生变化,所有豪华客房的价格都会相同。这甚至可能与季节相结合。

其他人已经提到你应该有职业或预订表。否则:你怎么知道房间何时可用?