您如何为客人关系建模预订酒店房间(如果重要的话,在PostgreSQL中)?一个房间可以有几个客人,但至少有一个.
当然,人们可以通过外键将客人与预订联系起来booking_id
.但是,如何在DBMS级别强制执行一个房间必须至少有一个访客?
可能是不可能的?
实际上,如果您阅读了该问题,则说明已预订的酒店客房.这很容易做到如下:
Rooms: room_id primary key not null blah blah Guests: guest_id primary key not null yada yada BookedRooms: room_id primary key foreign key (Rooms:room_id) primary_guest_id foreign key (Guests:guest_id) OtherGuestsInRooms: room_id foreign key (BookedRooms:room_id) guest_id foreign key (Guests:guest_id)
这样,当OtherGuests为0或更多关系时,您可以强制执行至少有一个访客的预订房间.没有客人,您无法创建预订的客房,如果没有预订的客房,您将无法添加其他客人.
如果你想要一个n对n的关系,你应该遵循相同的逻辑,这种关系应该被规范化为一个单独的表,其中包含1到n和n对1的两个表.