Eu acho que você quer dizer é que uma reserva de quarto é, pelo menos, um convidado. ANSI SQL padrão que lhe permitem expressar a restrição como uma afirmação algo como:
create assertion x as check
(not exists (select * from booking b
where not exists
(select * from booking_guest bg
where bg.booking_id = b.booking_id)));
No entanto, não creio Postgres suporta isso (não tenho certeza qualquer DBMS atual faz).
Existe uma maneira usando visualizações materializadas e restrições de verificação, mas eu nunca vi isso feito na prática:
1) Criar uma visão materializada como
select booking_id from booking b
where not exists
(select * from booking_guest bg
where bg.booking_id = b.booking_id);
2) Adicionar uma restrição de verificação para a visão materializada:
check (boooking_id is null)
Esta restrição irá falhar se alguma vez a visão materializada não está vazio, ou seja, se há uma reserva com nenhum convidado associado. No entanto, você precisa ter cuidado com o desempenho desta abordagem.