Привет.

"Dmitri Kuzmenko" <[EMAIL PROTECTED]> сообщил/сообщила в новостях следующее: news:[EMAIL PROTECTED]


могу предложить свои мысли (буде статья, включим туда), по поводу
"курсов валют".

при организации курсов валют есть 2 классические ошибки, исходящие
из "прямого" решения задачи - хранения курсов валют в виде
код_валюты+дата+курс_валюты (или в ином порядке).

Ошибка 1.
Для оперативного пересчета курса валют на текущий день
строится запрос вида

select value, max(date)
from currency
where currency_code = :param
group by value

или что-нибудь в этом роде, но обязательно с max(date).

Чего-то тут не то. Такой запрос просто выберет данные из таблички по конкретной валюте. А групприовка вроде как по боку...


Поэтому для текущих курсов валют нужно организовать таблицу вида
currency_code+value
без даты, и заполнять значения КАЖДЫЙ ДЕНЬ при смене курса
какой-нибудь процедурой.
То есть, мы получаем таблицу, в которой есть записи в количестве
используемых валют, и с самыми последними значениями курсов.
Это СУЩЕСТВЕННО ускорит запросы по определению текущего курса.

А предыдущие на триггерах перемещаются в табличку истории c датами? Я правильно понял?



Ошибка 2.
Пропуски в датах курсов валют в вышеобозначенной таблице.
Не будь их - не нужен max, и можно делать прямое объединение таблиц
по коду валюты и дате.
Опять же, от пропусков избавляются ежедневным занесением курса
валют на текущую дату "сервисной процедурой", которая одновременно
обновляет курсы валют в таблице "текущих курсов".

претензии к изложенному принимаются.


Принимай:) :

Ты, да и Ded тоже, как-то больше о текущем курсе валюты пеклись, когда сообщения писали. На самом деле много документов вводится задним числом, так что проблема решается как бы наполовину :). А два разных алгоритма для практически схожих ситуаций, реализовывать влом. Пусть даже и ценой некоторой потери быстродействия. Кроме того (согласен с Ded-ом) в большинстве случаев этот справочник используется просто для подстановки значения курса в документ. То бишь как рекомендуемое значение. У меня оно может менятся в зависимости от результатов торга с клиентом. И понятное дело, никаких join-ов к этому справочнику во время вытаскивания документов нет. У меня, правда, есть другой случай - разные отчеты за период в выбранной пользователем валюте. Вот тут вытаскиваются кросс-курсы между валютами на дату. И действительно у меня существует табличка с кросс-курсами на каждую дату. Но это уже как-то не для статьи. Слишком много прикладной специфики получается. Я б попроще случай выбрал. Ну к примеру фамилию и номер паспорта клиента, ну и его пол - для обострения интереса:)
With b/r. Gleb.

P.S. По поводу статьи - я могу попробовать. Если что-нибудь получится - попрошу Ded-а посмотреть, ну и тебе на окончательное доведение до ума. Я как-то этим делом не баловался раньше никогда. Так что не уверен, что без посторонней помощи выйдет чего-нибудь интересное.

P.P.S. to Ded - Ежели чего накарябаю, ты как? Поможешь?



Ответить