@ivacry

Как хранить данные о периодах времени когда бронирование доступно?

Добрый вечер
Нужно написать сервис бронирования номеров в отеле
Я хотела изобразить микросервисную архитектуру, где отдельным микросервисом будет info-service(геоданные об отеле и описание) и отдельным будет booking-service, и соттветственно у них будут отдельные БД
Насколько это релевантный подход?

64f4beaeda685849833887.png

64f4bdd59d341693577219.png

И главный вопрос, как лучше всего хранить данные о свободных/забронированных номерах?
Сейчас я предполагаю, что у меня в таблице Booking есть даты check_in/check_out и статус бронирования(подтверждено, отклонено, отменено, на рассмотрении)
А как лучше хранить данные о свободных номерах и периодах когда они свободны?

Спасибо
  • Вопрос задан
  • 122 просмотра
Пригласить эксперта
Ответы на вопрос 1
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
у них будут отдельные БД
это не правильно! Должна быть общая база с таблицами отелей, комнат и бронирования

очень приблизительная структура таблиц и запрос на поиск свободных комнат
create table hotels (
    id serial primary key,
    name text
    -- other fields
);

create table rooms (
    id serial primary key,
    hotel_id int references hotels(id),
    description text
    -- other fields
);

create table bookings (
    id serial primary key,
    room_id int references rooms(id),
    check_in date,
    check_out date,
    status smallint
    -- other fields
);

-- get free rooms
select * 
from rooms
join hotels on hotels.id = rooms.hotel_id
where not exists (
    select true from bookings 
    where
        room.id = bookings.room_id and 
        'requested_check_in' between check_in and check_out and
        'requested_check_out' between check_in and check_out 
) and (
    -- other filters 
)

https://sqlize.online/s/MD
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы