|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Всем привет. Подскажите имеет на существование велосипед который я придумал. В базе есть таблица курсов валют вида id_currencyexchangerate_maxexchangerate_mindate110.58.123.12.2016420.218.723.12.2016 Есть основная валюта (основная валюта может быть только одна, и изменить основную валюту невозможно) для которой курс не устанавливается, для всех других валют установлен курс, курс устанавливается каждый операционный день. Для каждой модели (товар) в таблице моделей присвоено id_currency. в большинстве случаев пользователи видят цены в основной валюте, с учетом курса, придумал следующую выборку. Код: sql 1. 2. 3. 4.
Выборка сводится к условию если для модели нет курса цену умножаем на 1 если есть цену умножаем на exgerates.exchangerate_max и получаем стоимость модели с учетом курса. Имеет право на жизнь? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 02:50 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 07:06 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Сугубо личное мнение SashauaЕсть основная валюта (основная валюта может быть только одна, и изменить основную валюту невозможно) Изначально не универсальное решение, проблема заложенная под масштабируемость системы. авторДля каждой модели (товар) в таблице моделей присвоено id_currency. Если пользователю нужно видеть текущую цену в другой валюте, нужно смотреть на текущую дату (правильнее - текущий=актуальный курс). Если речь идет о переводе цены покупки, то надо смотреть по дате покупки, а не по ID перевода из одной валюты в другую - также в этом случае лучше рассмотреть вариант хранения для товара цены в основной валюте (отклонение от нормализации, но упростит=ускорит многие выборки). Также можно установить не только дату, а актуальность курса и при добавлении нового курса отменять актуальность предыдущего - это упростит выборки когда на текущую дату курса нет (например в выходные курс не меняется). При Вашем решении - можно сделать так как посоветовал Exteris Можете хранить курс 1:1 и ссылайтесь на него по ID. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 07:20 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Sashaua, Ну то есть завожу я в таблицу новую валюту, и пока к ней курс (завтра) не прочитался, выдаётся какая-то лажа. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 10:05 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
ЦБ РФ устанавливает курс валют... на завтра или на выходные/праздничные/понедельники. То есть они действуют с 00:00:00 нового дня. А раньше таки да, фигня с "прыгающим" курсом в течении биржевого дня имела место. Время "публикации" нового курса жестко не определено, где-то с 12:00 до 16:00, по "желанию" регулятора. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 10:32 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Hello, Sashaua! You wrote on 23 декабря 2016 г. 16:48:58: Sashaua> Для каждой модели (товар) в таблице моделей присвоено id_currency.зачем? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2016, 16:49 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Exteris select count,name_model......, coalesce(exgerates.exchangerate_max, 1) * price спасибо за наводку. Евгений, Екатеринбург Изначально не универсальное решение, проблема заложенная под масштабируемость системы... добавлении нового курса отменять актуальность предыдущего Согласен, как то так получилось, пока нет возможности подумать насчет универсальности в этом месте. Операция установки курса представляет собой добавление записи в таблицу курсов валют с текущей датой, и для "не критичных" операций таких как просмотр остатков с ценами выбирается для модели курс с максимальной датой, для операций продаж и подобных требуется установка курса на текущий день (так бизнес захотел). WildSeryНу то есть завожу я в таблицу новую валюту, и пока к ней курс (завтра) не прочитался, выдаётся какая-то лажа. При добавлении новой валюты предлагается сразу установить курс. Мимопроходящий Sashaua > Для каждой модели (товар) в таблице моделей присвоено id_currency. зачем? Есть модели которые закупаются в разных валютах (отличной от той в которой продают), и для этого была реализована такая схема. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 02:35 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
SashauaОперация установки курса представляет собой добавление записи в таблицу курсов валют с текущей датой, и для "не критичных" операций таких как просмотр остатков с ценами выбирается для модели курс с максимальной датой, для операций продаж и подобных требуется установка курса на текущий день (так бизнес захотел). Поэтому и надо хранить ID валюты, в которой указана цена, а не ID курса. И если по валюте курс "несвежий" надо предупреждать об этом пользователя, например, давать подсказку сколько дней назад был установлен этот курс. Может товар покупали за тугрики и курс по ним в Вашей системе операторы не меняли уже 2 года (на этот случай можно предусмотреть возможность привязки к другой валюте - например, купили за турецкие лиры, но чтобы не отслеживать постоянно курс - перепривязали к доллару и дальше отталкиваетесь от этого). В общем продумывайте систему на будущее, чтобы потом не пришлось переделывать постоянно добавляя новые таблицы и атрибуты. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 08:06 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Hello, Sashaua! You wrote on 28 декабря 2016 г. 12:23:12: SashauaМимопроходящийSashaua>> Для каждой модели (товар) в таблице моделей присвоено id_currency. > зачем?> Есть модели которые закупаются в разных валютах (отличной от той в которой продают), и для этого была реализована такая схема. неправильная схема учёта, если это "белая" схема. даже если это "серая" схема, то обычно в таком случае ведут мультивалютный учёт - для каждой валюты своя "кучка" товара. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:27 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Hello, Евгений, Екатеринбург! You wrote on 28 декабря 2016 г. 12:27:53: Евгений, Екатеринбург> надо хранить ID валюты, в которой указана цена, а не ID курса.+1 Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 12:28 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Евгений, ЕкатеринбургПоэтому и надо хранить ID валюты, в которой указана цена, а не ID курса. Цены, аки резиденты РФ обязаны публиковать (указывать в документах) в рублях. Хоть и МП ниже всказалсси, но моя имха против такого подхода. Всё зависит от организации табли "Валюты". У мну в табле "Валюты" ID_курса номер дня в формате YYYYMMDD. И нужное кол-во столбиков: $, Euro, Шв. франки, Фунты стерлингов и прочее. В ячейках хранится курс на эту дату для данной валюты. Табля ведется с 2007 года. - Чё я делаю не так уже 10 лет? Если во всех возможных бизнес-ситуациях, включая распорки с клиентами в судах, претензий к системе не возникало. Евгений, ЕкатеринбургВ общем продумывайте систему на будущее, чтобы потом не пришлось переделывать постоянно добавляя новые таблицы и атрибуты. Совет пральный, еще бы следовал ему... Ща ЕС посыпится и опять вернемся ко множеству валют. - У мну они есть. А чё придется перелопачивать тебе? Ессессено вопрос риторический. И в большей степени - метедологический: - Вертикальные vs горизонтльные табли в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
28.12.2016, 15:48 |
|
Выборка с учетом курса
|
|||
---|---|---|---|
#18+
Di_LIneЦены, аки резиденты РФ обязаны публиковать (указывать в документах) в рублях. Публикуй как требует закон, просматривай в любой валюте в которой требуется, храни универсальным образом. автор- Чё я делаю не так уже 10 лет? Тебе виднее - ты программист, я любитель, поэтому говорю так как вижу из своей практики. Я бы начал примерно так - завел справочник валют Код: plsql 1. 2. 3.
Таблицу операций с валютами, она же таблица курсов Код: plsql 1. 2. 3. 4. 5. 6.
Справочник типов операций Код: plsql 1. 2.
Предустановленные типы операций 1. Курс покупки. 2. Курс продажи. 3. Курс ЦБ. 4. Курс преобразования валюты. 5. Коэффициент инфляции. 6. Продажа товара. 7. Покупка товара. Покупки фиксировал бы в таблице операций с товарами Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
При такой структуре я могу не трогая структуру базу, а только лишь силами пользователя отобразить любые данные - хранить курсы покупки, продажи, ЦБ, преобразование одних валют в другие - дойчмарки в евро (в том числе наоборот если Греция отвалится и вернет драхмы), и даже преобразование одной валюты - например, деноминацию. Такая структура позволит мне, например, отследить текущую стоимость товара в рублях, который был куплен за дойчмарки в 1995 году, позволит продать программу в другую страну, где нет обязанности хранить в рублях и т.п. Но, конечно правильным программистам виднее... авторИ в большей степени - метедологический: - Вертикальные vs горизонтльные табли в БД. Это философский вопрос, но примерно в 80% случаев где я пожалел времени и стал делать горизонтальные столбцы для дополнительных (=вспомогательных) атрибутов, я потом пожалел об этом - каждый чих, каждая дополнительная настройка приводят к изменению структуры, в том числе у пользователей у которых нет DBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2016, 13:37 |
|
|
start [/forum/topic.php?fid=40&fpage=50&tid=1561774]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 139ms |
0 / 0 |