Я действительно работал над проектированием и внедрением системы бронирования отелей и могу предложить следующие рекомендации, основанные на моем опыте.
Я бы порекомендовал ваш второй вариант дизайна, сохранив по одной записи для каждой индивидуальной комбинации «Дата/Отель». Причина заключается в том, что, хотя будут периоды, когда ставка гостиницы одинакова за несколько дней, скорее всего , вероятно,, что, в зависимости от доступности, он со временем изменится и станет другим (гостиницы, как правило, увеличивают стоимость номера по мере доступности капли).
Также есть и другие важные фрагменты информации, которые необходимо будет храниться, которые являются специфическими для данного дня:
- Вам нужно будет управлять доступностью отеля, то есть по дате х там являются y свободных номеров. Это почти наверняка будет меняться в зависимости от дня.
- Некоторые отели имеют периоды отключения, когда отель недоступен в течение коротких периодов времени (обычно в определенные дни).
- Время в пути - некоторые отели разрешают только номера, которые бронируются за несколько дней, это может различаться между неделями и Выходные.
- Минимум ночи, снова данные, хранящиеся на отдельной дату, которая говорит, если вы приедете в этот день вы должны оставаться х количества ночей (скажем, в течение выходных дней)
Также рассмотреть человек бронирование длительного пребывания недели , запрос базы данных, чтобы возвращать тарифы и доступность для каждого дня этого пребывания, намного более кратким, если у вас есть запись о ценах для каждой Даты. Вы можете просто выполнить запрос, в котором дата тарифа номера находится МЕЖДУ Днем прибывания и отъезда, чтобы вернуть набор данных с одной записью на дату пребывания.
Я понимаю, что при таком подходе вы будете хранить больше записей, но с хорошо проиндексированными таблицами производительность будет прекрасной, и управление данными будет намного проще. Судя по вашему комментарию, вы говорите только в области из 18000 записей, которые являются довольно небольшим объемом (система, в которой я работал, имеет несколько миллионов и отлично работает).
Чтобы проиллюстрировать дополнительные функции управления данными, если вы DO не хранить одну запись в день, представьте, что отель имеет скорость 100 долларов США и 20 номеров, доступных для всего декабря:
Вы начать с одной записью:
1-Dec to 31st Dec Rate 100 Availability 20
Затем вы продаете одну комнату на
бизнес-логики 10 декабря
теперь должен создать три записи из о пе выше:
1-Dec to 9th Dec Rate 100 Availability 20 10-Dec to 10th Dec Rate 100 Availability 19 11-Dec to 31st Dec Rate 100 Availability 20
Тогда изменения курса на 3-й и 25-Дек до 110
Ваш бизнес-логики теперь есть снова разделить данные:
1-Dec to 2-Dec Rate 100 Availability 20 3-Dec to 3-Dec Rate 110 Availability 20 4-Dec to 9-Dec Rate 100 Availability 20 10-Dec to 10-Dec Rate 100 Availability 19 11-Dec to 24-Dec Rate 100 Availability 20 25-Dec to 25-Dec Rate 110 Availability 20 26-Dec to 31-Dec Rate 100 Availability 20
То есть больше бизнес-логики и больше накладных расходов, чем хранение одной записи на дату.
Я могу гарантировать, что к тому моменту, когда вы закончите, ваша система будет иметь одну строку на каждый день, так что вы могли бы так же спроектировать ее с самого начала и получить преимущества упрощенного управления данными и более быстрых запросов к базе данных ,
FYI, это действительно не много строк, а не то, что мне было бы интересно. Гораздо важнее взглянуть на это, чтобы посмотреть, можно ли это сделать (логически). Не думайте о количестве строк в этом случае.У меня есть подобная система единой цены за одну дату (очевидно, несколько опций), которая имеет более 97 000 строк. Это число, даже если оно было в 10 раз, меня не касается. С другой стороны: логика кода проще с отдельными датами. – Novocaine
FWIW, я бы пошел с опцией 1. to_date не является обязательным - так как это действительно только за день до следующего «from_date» (хотя, возможно, с другого года) – Strawberry