假设我:
所以我的数据库里有两张桌子:酒店和房间。
这是酒店表 :(所有者#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
.. .. .. .. ..
问: 这种方法有效吗? (房间表没有任何主键,也不需要任何主键)
提前致谢。
答案 0 :(得分:3)
room
表没有任何主键,也不需要任何
假设有其他表(例如reservation
和occupancy
引用room
表中的行,则需要主键。 room
表确实有一个很好的主键候选 - 复合键(Hotel_ID, Room_Number)
。引用房间的其他表格可以存储Hotel_ID
和Room_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上创建一个唯一的约束。
关于设计表,请考虑实体。每个房间都有自己的价格吗?通常不是。你宁愿为酒店提供类别,说“基本”,“优雅”,“奢侈”,这些都有价格。一旦奢侈品价格发生变化,所有豪华客房的价格都会相同。这甚至可能与季节相结合。
其他人已经提到你应该有职业或预订表。否则:你怎么知道房间何时可用?