Привет.
"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 - Ежели чего накарябаю, ты как? Поможешь?