В транзакции делаешь два запроса
Первый: проверяешь, что комната не забукана
Второй: букаешь комнату
Можно это вообще в процедуру запихнуть
Если первый запрос фейлит операцию, то юзеру показываешь тостер, что упс, но не судьба
Но тут сразу вопрос, какие планы по горизонтальному расширению, репликации и т.д.?