powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Расчет цены и сортировка
25 сообщений из 52, страница 1 из 3
Расчет цены и сортировка
    #38921704
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую Вас, уважаемые форумчане!

У нас есть такие таблицы:

DISCOUNTS
- reservation_from_date
- reservation_to_date
- from_date
- to_date
- coef
- hotel_id

PERIODS
- reservation_from_date
- reservation_to_date
- from_date
- to_date
- hotel_id

PRICES
- period_id
- sum

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

Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи.

Считать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей.

Проблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена.

Пожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт?
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921713
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgРезультатов могут быть до 100 000
Столько отелей ни в одном городе нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921723
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В отелях есть разные типы комнат, питание, виды из номеров и тд, на один отель могут быть много результатов.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921726
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgПолучается так что если ищем цены за определенный интервал, то к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки, доп условия и тд).
Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи.


100000 -- это не так уж и много, при правильной организации БД вполне можно всё сделать быстро.

gnuorgСчитать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей.


Не верю, что миллионы.

gnuorgПроблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена.


"нам важна сортировка" -- ну так и в чём проблема ? Сортируй.

gnuorgПожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт?

Прежде всего, объяснить задачу. Прежде всего -- себе.
Я не понял, в чём проблема.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921730
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgУ нас есть такие таблицы:

DISCOUNTS
- reservation_from_date
- reservation_to_date
- from_date
- to_date
- coef
- hotel_id

PERIODS
- reservation_from_date
- reservation_to_date
- from_date
- to_date
- hotel_id

PRICES
- period_id
- sum



Ну и БД какая-то невменяемая, кто на ком стоял -- не понятно.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921755
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

Я не хотел напрягать вас разными тонкостями программы, но результатов реально много, даже если выдается 1000 результатов, все равно долго обрабатываються.

Цена формируется примерно следующим образом:

Интервал поиска 01.05.2015 - 10.05.2015

01.05 - 10$ - discount_1 - discount_2 + markup
02.05 - 10$ - discount_1 + markup
03.05 - 10$ - discount_1 + markup
04.05 - 15$ - discount_1 + markup
...
+ Доп услуги
+ трансфер
+ билеты за транспорт

= цена за тур

Собственно вопрос в том - Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену?
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921772
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgMasterZiv,

Я не хотел напрягать вас разными тонкостями программы, но результатов реально много, даже если выдается 1000 результатов, все равно долго обрабатываються.

Цена формируется примерно следующим образом:

Интервал поиска 01.05.2015 - 10.05.2015

01.05 - 10$ - discount_1 - discount_2 + markup
02.05 - 10$ - discount_1 + markup
03.05 - 10$ - discount_1 + markup
04.05 - 15$ - discount_1 + markup
...
+ Доп услуги
+ трансфер
+ билеты за транспорт

= цена за тур

Собственно вопрос в том - Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену?

пока ничего нереального не вижу, попробуй напиши, не получиться - сделаешь то же самое в виде предрасчета.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38921929
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorg Реально сложные расчеты производить в реально времени и отсортировать их или нужно все-таки рассчитать цены заранее и выдать готовую цену?

В первую очередь, определитесь могут ли у вас меняться цены на отель в течение дня? Или они фиксируются в некоторый час Х на день и в течение дня не меняются?
Если второй вариант - очевидно, достаточно рассчитать единожды и не напрягать лишними пустыми расчетами при каждом запросе.

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

Так же определитесь как будет работать приложение по времени: 8(12)х5(7) или 24х7?

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

Чем принципиально скидка отличается от надбавки, кроме как знаком перед суммой?
ИМХО, разделять их не хороший вариант.

gnuorgСчитать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей.

Пересчитывать надо только те скидки , статус которых изменился на момент расчета.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38922138
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorg,

Для начала схему покажите - так лучше воспринимается. Потом объясните цели и задачи. А то непонятно за что боретесь.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38922212
LSV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какая СУБД ?

зы: Наверно какое-то убожество типа sqlite или Mysql
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38922261
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgЯ не хотел напрягать вас разными тонкостями программы, но результатов реально
много, даже если выдается 1000 результатов, все равно долго обрабатываються.
Даже на евробукинг если задать число людей, время и город ты не получишь больше сотни-двух
вариантов. Потому что их физически больше нет. Если у тебя 1000, да ещё и работает
медленно, это значит, что во-первых, критерии слишком нечёткие, а во-вторых, обработка
построена из рук вон криво.

Поэтому, как уже сказали, показывай реальные структуры данных и примеры обработки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923054
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Указал ниже ссылка на картинку со схемой, простите что связи не указал, не разобрался еще в navicat-e.

ссылка на изображение

Я знаю что там проблемы есть, в структуре и стыдно такое показывать.

авторА какая СУБД ?

СУБД - PostgreSQL

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

автор критерии слишком нечёткие

Согласен с Вами, но клиент хочет чтобы отображались все что есть в базе на указанный интервал, ему удобнее смотреть самые дешевые цены.

Расчет примерно таков:

Интервал поиска 01.05.2015 - 07.05.2015

Extrass discount сидит 7 дней - платит за 6

01.05 - 10$ - discount - discount 2 - discount 3
03.05 - 10$ - discount - discount 2 - discount 3
04.05 - 10$ - discount - discount 2
05.05 - 15$ - discount 2
06.05 - 15$ - discount 3
07.05 - 15$ - discount 3

+ доп условия
+ трансфер
+ билеты за транспорт

= цена за тур

Соглашусь с автором:

Mikle83Пересчитывать надо только те скидки, статус которых изменился на момент расчета.


Как вы посоветуете, тратить по больше времени и сделать расчеты за ранее или производить их каждый раз при поиске?
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923070
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgУказал ниже ссылка на картинку со схемой, простите что связи не указал
Забей на картинки, пость SQL скрипт с CREATE TABLE и FOREIGN KEY. Он намного нагляднее и
даёт больше информации.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923086
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorg,

Лично у меня ссылка не открылась. Да и если там нет связей, то толку от нее никакого.
Храните уже готовый расчет, так будет проще. Хотя и на лету считать тоже можно. Эх, студенты ...
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923103
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
схема
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923121
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Совершенно отстойная схема. Неудивительно, что она не работает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923126
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСовершенно отстойная схема. Неудивительно, что она не работает.

Спасибо за ответ, буду очень признателен если перечислите пару серьезных ошибок в структуре базы.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923129
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка первая и главная: информация слишком размазана по разным таблицам. Собери цены в
одну таблицу, а поправки к ним в другую. Всё не относящееся к расчёту - вынеси вон. Тогда
считать будет легко даже для мускуля.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923214
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorg,

Увидев поля varchar(0) могу посоветовать автору бежать оттуда. Хотя нет, пусть потребует больше денег и все завалит. Хотя всеравно завалит. Ну а потом уже и убежать можно попытаться.
Если не умеете что-то делать - не беритесь. Ну не всем же быть космонавтами ...
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923215
Mikle83
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgMikle83Пересчитывать надо только те скидки, статус которых изменился на момент расчета.
Как вы посоветуете, тратить по больше времени и сделать расчеты за ранее или производить их каждый раз при поиске?

Так там еще вопросы были, исходя из которых выбор варианта будет очевидным:
а) Можете ли вы (согласно бизнес требованиям) зафиксировать скидки на день и не менять их в течение дня? Будут ли данные актуальными?
б) как предполагается пользоваться приложением? Будет ли таймаут, когда никто не пользуется БД (к примеру, в 20-00 все ушли домой и закрыли офисы).

Если оба ответа "да" - то имхо считать однократно ночью, когда все спят.
Если хотя бы один ответ "нет" - то вариантов слишком много, а вводных данных от вас слишком мало. Но в таком случае 100% надо вводить понятие "актуальные" данные и пересчитывать только то, что изменилось.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923216
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikle83Так там еще вопросы были, исходя из которых выбор варианта будет
очевидным
Судя по обрывкам информации, у него БД какого-то бюро путешествий, где туры планируются
задолго вперёд. Поэтому никаких изменений скидок быть не может. Как и предпросчёта всех
вариантов на годы вперёд.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923264
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgПолучается так что если ищем цены за определенный интервал, то к каждому результату нужно применить скидки (помимо таблицы скидок существуют много других, как надбавки, доп условия и тд).

Результатов могут быть до 100 000, соответственно если применить скидки к каждому результату это сильно отразится на скорость выдачи.

Считать заранее цены сложно потому что скидки могут быть активны сегодня но неактивны завтра, значит нужно каждый день пересчитать а это миллионы записей.

Проблема в том что нам очень важна сортировка, мы можем сделать пагинацию но проблема со скидками, пока они не будут применены мы не знаем какая эта будет цена.

Пожалуйста, подайте идею, в какую сторону двигаться, может у кого-то был подобный опыт?

Не понятно - в чем проблема то? Я так понял, что задача заключается в том, чтобы при расчете тура надо сказать клиенту сколько он заплатит за нужный ему период , при этом предложив разные варианты.
Ну так в чем проблема- выбирайте стоимость для каждого отеля на каждый день нужного периода, выбирайте скидки на этот же период для этих же отелей и задача то в общем несложная.
Ну и потом сортируйте уже результаты выборки. Что вас затрудняет?

Написание запроса, ессено, будет зависеть от СУБД. Если под ораклом- то там есть интеллекутальные запросы- там вообще можно чудеса творить. Хотя для вашей задачи это в общем то не нужно.

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

И еще замечание по схеме - на мой взгляд в ценах должен быть не update (судя по полю updated_at), а insert (вы же собираетесь хранить всю историю изменения цен? Ну и такая же история по скидкам).
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923265
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПоэтому никаких изменений скидок быть не может. Как и предпросчёта всех
вариантов на годы вперёд.
Ошибаетесь - вполне могут быть изменения и цен и скидок- единственное нельзя делать перерасчет по уже заключенным договорам. В них останется старая цена и старая скидка.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923352
gnuorg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторСудя по обрывкам информации, у него БД какого-то бюро путешествий, где туры планируются
задолго вперёд. Поэтому никаких изменений скидок быть не может. Как и предпросчёта всех
вариантов на годы вперёд.

Скидки могут меняться каждый день.

Проблема с предпросчетом в том что мы не знаем на сколько дней клиент может заказать тур. интервал от 3 до 30 дней.

Если хранить готовые цены за каждый день из интервал то получится примерно столько записей:

300 отелей * 10 типов комнат * 365 дней в году * 27 дней (интервал проживания) = 29 565 000 цен (на самом деле их гораздо больше)

Вот столько нам нужно рассчитать каждый день (если не перерасчитать только те цены и скидки которые были редактированы).

Второй вариант перерасчета это за каждый день а не за кол. дней проживания в отель - 300 отелей * 10 типов комнат * 365 дней в году = 1 095 000 цен.

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

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

Вы правы, даже удаление отеля никак не затрагивает уже существующие договора.
...
Рейтинг: 0 / 0
Расчет цены и сортировка
    #38923363
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gnuorgПроблема с предпросчетом в том что мы не знаем на сколько дней клиент может заказать тур. интервал от 3 до 30 дней.


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

Мне кажется клиент когда обращается- он хотя бы какие то параметры говорит: либо даты начал-конца, либо без уточнения даты- чтобы стоимость была минимальная.
И в том и в другом случае есть выход на более краткосрочный период.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 1 из 3
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Расчет цены и сортировка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]