【问题标题】:Database design for multiple hotel and multiple room?多酒店多房间的数据库设计?
【发布时间】:2015-10-14 14:43:02
【问题描述】:

假设我:

  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
    ..        ..           ..           ..             ..

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

  1. 还有更好的设计吗?

提前致谢。

【问题讨论】:

  • 你至少应该有酒店、房间和入住的桌子。
  • 感谢您的快速评论,我有酒店和房间的桌子。我真的不需要有关入住率的信息 -> 两张桌子之间的关系是否“健康”? -> 所有酒店的所有房间都在一张桌子上
  • 这种设计只会为您提供当前入住时间的快照。它不会让您处理未来的预订(但这可能是您想要的)。
  • 将所有房间放在一张桌子上完全没有问题。嗯,这是房间表,你还想在哪里存放房间?这是我能真正想到的最佳解决方案。

标签: sql database database-design


【解决方案1】:

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 的表格设计可以让您非常轻松地做到这一点,而您当前的设计会让您很难修复现有数据。

【讨论】:

    【解决方案2】:

    这看起来像是酒店和房间之间直接的一对多关系

    如果您将 (Hotel_ID, Room_Number) 考虑在内,房间表已经有一个主键(复合键)

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

    【讨论】:

      【解决方案3】:

      如前所述,房间由 Hotel_ID + Room_Number 标识,因此这将是一个很好的主键。 (您可以添加一个技术 ID,并且可以将其设为主键,但请记住,这是附加的,您仍会在 Hotel_ID + Room_Number 上创建唯一约束。

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

      其他人已经提到您也应该有一个职业或预订表。否则:你怎么知道什么时候有空房?

      【讨论】:

        猜你喜欢
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 2022-11-11
        • 2012-03-06
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多