2015-10-14 46 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上创建唯一约束)。

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

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