Как в таблице хранить свободные даты для номеров в гостинице?
Не совсем гостиница. Скорее booking или airbnb - то есть количество номеров внушительное.
Нужно узнать о свободных номерах на заданный период времени (условно, с 20 марта по 25 марта). То есть отразить те гостиницы, в которых заданные дни свободны.
1. Как должна выглядеть структура таблицы свободных и занятых дат?
2. И как должна выглядеть структура стоимости номеров, если весь месяц может быть одна стоимость, а на праздники - другая стоимость?
Я должен создавать для каждого арендуемого объекта отдельную таблицу, где каждая запись будет соответствовать каждому дню? Просто в моём понимании, выборка может занимать длительное время. Разумеется это быстрее, чем если бы я имел таблицу "Объекты", где каждая запись - это гостиница, а в столбце, в формате json, хранил бы массив с днями - это уже совсем клиника.
accountnujen, а это уже вторая проблема)
Как так кэшировать, чтобы не умереть.
Цены врядли прям каждые несколько минут меняются, так что вполне можно кэшировать
Для решения именно указанной задачи можно иметь в БД заранее сформированные таблицы по каждому запросу и гостиницам, в которых в принципе есть подходящие номера.
К примеру:
Запрос: "2 взрослых +1 ребенок", на него имеем таблицу с идентификаторами всех гостиниц, в которых есть удовлетворяющие этому запросу номера.
А потом в момент оформления заказа отмечаем в отдельной таблице, что именно в этой вот гостинице на такую-то дату не осталось номеров по такому-то запросу.
Как итог, в любой момент одним запросом можно найти все гостиницы, которые удовлетворяют запросу и про которые на указанные даты нет записей, что все подходящие под запрос номера заняты.
Что-то сложно навернул. Надо прикидывать конкретную структуру БД и на ней уже решать все типичные задачи.
P.S. Возникает ощущение, что вы хотите обязательно искать в БД запись о том, что что-то есть, а ведь можно проверять отсутствие нужной записи =)
P.S. Возникает ощущение, что вы хотите обязательно искать в БД запись о том, что что-то есть, а ведь можно проверять отсутствие нужной записи =)
я скорее будут искать номера, где busy будет = 0. И их сразу выводить. В противном случае я нахожу номера занятые (если запись означает бронирование), значит ненайденные номера - свободны. Но в этом случае мне нужно будет сопоставлять ненайденные с оставшимися. Мне кажется, это будет дольше... Возможно ошибаюсь.
Запрос: "2 взрослых +1 ребенок", на него имеем таблицу с идентификаторами всех гостиниц, в которых есть удовлетворяющие этому запросу номера.