Je pense que ce que vous voulez dire, c'est qu'une chambre réservée est pour au moins un invité. ANSI SQL standard vous permettra d'exprimer la contrainte comme quelque chose comme AFFIRMATION:
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)));
Cependant, je ne pense pas que Postgres soutient que (je ne suis pas sûr que tout SGBD courant ne).
Il est un moyen utilisant des vues matérialisées et les contraintes de vérification, mais je ne l'ai jamais vu cela dans la pratique:
1) Créer une vue matérialisée comme
select booking_id from booking b
where not exists
(select * from booking_guest bg
where bg.booking_id = b.booking_id);
2) Ajouter une contrainte de vérification à la vue matérialisée:
check (boooking_id is null)
Cette contrainte échouera si jamais la vue matérialisée est pas vide, à savoir s'il y a une réservation sans invité associé. Cependant, vous devrez faire attention à la performance de cette approche.
Vous devez avoir un hôtel très efficace s'il n'a jamais de chambres vides. –
Voici les chambres réservées –
Votre design ... Il y a quelque chose qui ne va pas. – Will