多房间预订的数据库设计:一对多

Posted

技术标签:

【中文标题】多房间预订的数据库设计:一对多【英文标题】:Database Design for Multiple Room Reservation: One To Many 【发布时间】:2012-03-06 20:51:27 【问题描述】:

主要实体: 客户 客人 预订 房间分配

我想实现一个多房间预订数据库设计。首先,我想先解释一下这个概念:

    客户是获得预订的人。 客户一次只能有 1 个预订 客户可以预订多个房间。

    客人是被分配到特定房间的人。

    所以对于表:

    Client (client_id(PK), Name) Guest (guest_id(PK), Name)

    Reservation (reservation_id(PK), client_id(FK), roomAss_id(FK), checkInDate);
    RoomAssignment (roomAss_id(PK), guest_id(FK), roomno(FK));
    Room(room_id(PK), roomDetails);
    

//这里的问题是我不知道如何实现一对多的关系。我的预订应该处理多个 RoomAssignment?或者我的 RoomAssignment 会处理多个 guest_id 和 roomno,然后我会将 1 个 roomass_id 传递到我的预订表中?

谢谢,我真的很困惑这种一对多的关系。我希望有人能帮助我而不是给我负面的分数。 T_T

另一个尝试:

Room(room_id(PK), roomDetails);
Client (client_id(PK), Name)
Guest (guest_id(PK), Name)
Reservation (reservation_id(PK), client_id(FK), checkInDate);
Booking(book_id(PK), reservation_id(FK), room_id(FK));
Lodging(lodge_id(PK), guest_id(FK), book_id(FK))

(Client、Room、Guest 已满),添加 Reservation,添加 Booking,添加 Lodging

这是正确的吗??

【问题讨论】:

【参考方案1】:

编辑在考虑了更多之后改变了我的建议。这是一个比我最初想象的更深的谜题。)

我的偏好是让 Reservation 与房间具有多对多关系(使用桥接表)。使用 ReservationID 和 RoomID 外键调用此表,例如 . . . 预订。也许你可以想一个更好的名字。预订是预订的特定房间。然后,我将有另一个桥接表来表示客人和预订之间的关系。您也许可以称其为住宿。住宿是指分配给特定预订(预订房间)的特定客人。

这是一个很好的谜题。关键是你有几个具体的东西,它们独立存在并且显然是必要的(预订,房间,客人),还有其他几个概念,每个都有自己的属性,并且来自这些东西之间的关系。如果这将被正确规范化,您最终可能会得到比您想象的更多的表。不要认为这会变得更复杂。拥有足够的适当表格将最终简化这一过程。以下是一些其他建议:

花时间在每个表的名称上。我上面的建议非常好,但您可能可以改进它们。预订既是其他事物之间的关系,又成为一种思考本身,在另一张桌子上至少有一个外键。 您应该能够描述表中的记录所代表的内容。如果你不能做到这一点,那么你的桌子就糟透了。请参阅上面我如何描述预订和住宿。您的设计最终可能会有所不同,但当您集思广益时,请确保您可以描述该表上的实际记录。 考虑让 Guest 和 Client 来自同一个表。他们都是真正的“联系人”。有人可能在某一时刻成为客人,但在下个月成为客户。当联系人是客户时,您可能会保留一个额外的数据表(1 到 0 或 1)。如果某人只是作为客人,您的系统只会要求基本的联系信息,但如果他们作为客户,则更多。

【讨论】:

是的,每个房间都应该有 1 位客人注册。所以 1 个房间也应该有 1 位客人。 先生,另一个问题,我将在哪里获得reservation_id,因为我打算最后添加预订。我的订单如下:房间(已经填写了值/详细信息等)、客户、客人、房间分配和预订。感谢您的回答 先生,请给我看看。我看不清楚。如果你展示它会更好,这样对我来说会更容易。请:))) 考虑在流程早期创建一个 Reservation(其中很多数据未填写)。您可能要等到以后才索要数据(抄送号码、牌照、是否打折等),但可能应该尽早创建记录。 Contact(Guest、Client 等)当然可以在 Reservation 之前创建,但预订应先于其他事物。并不是说使用该软件的人甚至会知道正在创建预订。 先生,是不是说我要先加订房再订房住宿?

以上是关于多房间预订的数据库设计:一对多的主要内容,如果未能解决你的问题,请参考以下文章

设计一个高性能的酒店房间预订系统

java基于springboot+vue的酒店预订网站——计算机毕业设计

一对一、一对多、多对多,如何设计数据表?

数据库中根据数据一对一,一对多,多对多关系设计

房间数据库中具有一对多关系的 Where 子句

数据库表设计(一对多,多对多)