Отделение данных MySQL от простоты использования - PullRequest
2 голосов
/ 04 ноября 2011

Примите простую базу данных для бронирования отелей с тремя таблицами.

Таблица 1: Бронирование Эта таблица содержит дату заезда и выезда, а также ссылку на одну илибольше номеров и купон, если применимо.

Таблица 2: Номера В этой таблице приведены данные всех номеров в отелях с ценами за ночь и количеством кроватей.

Таблица 3: Купоны В этой таблице содержатся данные всех купонов.

Вариант № 1: Если вы хотите получить обзор резервирований за конкретный месяц с помощьюобщая стоимость каждой брони, вам нужно будет получить бронь, номера для каждой брони и купон (если он есть).

С этими данными вы можете рассчитать общую сумму длярезервирование.

Вариант № 2: Однако есть и другой вариант, который заключается в сохранении общей стоимости и скидки в таблице резервирования, чтобы было намного проще получить эти расчетыs.Недостатком является то, что ваши данные становятся гораздо более зависимыми и гораздо менее гибкими для работы.Я имею в виду, что вам нужно вручную обновлять общую стоимость и скидку в таблице бронирования каждый раз, когда вы меняете номер или купон, связанный с бронированием.

Что обычно рекомендуется с точки зрения производительности (опция # 2) независимость данных версии (опция # 1).

ОБНОВЛЕНИЕ: Это база данных MySQL с более чем 500 000 строк (резервирование) на данный момент, но быстро растет.Я хочу оптимизировать производительность базы данных на ранней стадии, чтобы UX оставался быстрым и отзывчивым.

Ответы [ 2 ]

3 голосов
/ 04 ноября 2011

Позвольте мне начать отвечать на это историей. (Несколько упрощенно.)

2011-01-01 Я забронировал номер на две ночи, 2011-03-01 и 2011-03-02. Вы не говорите мне, какую комнату я получу. (Потому что вы еще не знаете, какую комнату я получу.) Вы говорите мне, что это будет стоить 40 долларов за ночь. У меня нет купонов. Вы вводите мое бронирование в свой компьютер, даже если вы уже полностью зарезервированы на обе эти ночи. На самом деле, у вас уже есть один человек в списке ожидания на эти две ночи. (Перебронирование - это нормальное явление, а не ненормальное.)

2011-01-15 Вы повышаете тарифы на каждую комнату на 5 долларов США.

2011-02-01 Я позвоню еще раз, чтобы убедиться, что у вас все еще есть мое бронирование. Вы подтверждаете, что у меня есть бронирование на две ночи, 2011-03-01 и 2011-03-02, на 40 долларов. (Не 45 долларов, ваш текущий курс. Это не наша сделка. Наша сделка была 40 долларов за ночь.)

2011-02-12 Один человек звонит и отменяет свое бронирование на 2011-03-01 и 2011-03-02. У вас еще нет комнаты, в которой вы точно уверены, что я смогу зарегистрироваться. У другого человека из списка ожидания теперь есть комната; Я все еще в списке ожидания.

2011-02-15 Один человек звонит и отменяет свое бронирование на 2011-03-01 и 2011-03-02. Теперь у меня есть комната.

2011-03-01 Я регистрируюсь с купоном.

  • Вы можете хранить «текущую» или «стандартную» цену для каждой комнаты или для каждого класса номера, но вы должны хранить цену, которую мы договорились с моим предварительный заказ.
  • Бронирование не резервирует номера; они резервируют потенциальные комнаты. Вы не знаю, кто уйдет рано, кто уедет поздно, кто отменить и так далее. (Исходя из моего опыта, время от времени комната будет быть запечатан с места преступления. Вы тоже не знаете, как долго это продлится.)
  • Вы можете забронировать больше номеров, чем ночей в номере.
  • Купоны могут появиться в любое время до отъезда.

Если вы хотите получить обзор бронирования для определенного месяц с общей стоимостью каждого бронирования, вам нужно будет получить бронирования, номера для каждого бронирования и купон (если один присутствует).

Я так не думаю. Цена, которую вы согласились, должна быть указана в самой брони. Определенные комнаты не могут быть разумно назначены до последней минуты. Если есть один купон на бронирование, это может потребоваться сохранить вместе с бронированием.

Единственная проблема с отчетностью заключается в том, чтобы в ваших отчетах четко указывалось, какой ожидаемый доход следует игнорировать из-за перебронирования.

1 голос
/ 04 ноября 2011

Ответ вашего ответа зависит от размера вашей базы данных.Для небольшой базы данных вариант № 1 лучше, но для огромной базы данных вариант № 2 лучше.Так что, если вы скажете, сколько строк у вас есть в таблице, и какую базу данных используете (oracle, sqlserver и т. Д.), У вас будет более точный ответ.

...