|
Как организовать работу со справочником процентных ставок?
|
|||
---|---|---|---|
#18+
Есть задача создать справочник процентных ставок (ПС): *на определенную дату необходимо получить актуальную ПС. *ПС указывается в рублях и в валюте (2-а варианта, последний используется для всех валют отличных от рублей). *дата окончания может быть не указана - открытая ПС, действие не ограничено справа *новая ПС должна закрывать открытую ПС (если такая есть) Вопрос 1. Нормализованная таблица или нет? Дата начала Дата окончания Валюта ПС ----------------------------------------------------------- 01.02.2014 01.03.2014 RUB 3,4 01.02.2014 01.03.2014 CUR 5,4 Дата начала Дата окончания ПС_руб ПС_вал ----------------------------------------------------------- 01.02.2014 01.03.2014 3,4 5,4 Плюсы и минусы денормализации: + Уменьшение кол-ва запросов (в данном случае в 2 раза) + Пользователю достаточно завести одну запись - Если появится новая задача - вести ПС так же в другой валюте (например, USD) необходимо будет добавить колонку, однако есть полная уверенность, что колонок не будет больше 10. Вопрос 2. Как правильно организовать работу со справочником, и при этом минимизировать кол-во ошибок пользователя? Нужно ли запрещать удаление в таком справочнике? Какие проверки нужно организовать (проверка пересечения периодов, разрыва периодов, ограничение/проверки начальной и конечной дат)? Пока рассматриваю/сравниваю 2-а варианта. Общее У пользователя есть возможность только добавлять записи. При добавлении новой записи у текущей автоматически проставляется дата окончания = дата начала новой записи (если дата окончания не была заполнена). При добавлении новой записи, если есть пересечение периода с существующими - показывается предупреждение. Вариант 1. Записи могут иметь пересечения периодов. Если две записи имеют пересечение, то при выборке актуальной будет считаться запись заведенная последней. Для исправления ошибки достаточно завести новую запись. + простая логика реализации справочника - периоды могут иметь пересечения (что вроде как не правильно? - на одну дату м/б несколько записей) -/+ если пользователь заведет ПС за большой период, то перекроет все записи, но не удалит их Вариант 2. Записи после сохранения не имеют пересечений периодов. Для исправления ошибки достаточно завести новую запись. При этом если есть пересечения с существующими записями, они автоматически удаляются или обновляются (если новая запись полностью перекрывает старую - запись удаляется, если перекрывает конец периода - обновляется дата начала, если перекрывает начало периода - обновляется дата начала, если полностью включается в старую - старая запись удаляется и дополнительно создаются две новые) - сложная логика реализации справочника + периоды не имеют пересечения (что вроде как правильно? - на одну дату всегда одна запись) - если пользователь заведет ПС за большой период, то удалит все записи Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
17.02.2016, 23:59 |
|
Как организовать работу со справочником процентных ставок?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 09:32 |
|
Как организовать работу со справочником процентных ставок?
|
|||
---|---|---|---|
#18+
Sasha87, если нужно избежать "перечесений" периодов и при этом "дыр" в периодах тоже быть не должно, то можно обойтись только "датой начала". fromDate Currency Rate ---------------------------- 01.01.2016 RUB 1.5 16.01.2016 RUB 1.6 18.02.2016 RUB 1.7 Получается что с 01.01 по 15.01 включительно была ставка 1.5, далее с 16.01 по 17.02 включительно была ставка 1.6, а с 18.02 и по бесконечность (пока не появится другая запись) ставка 1.7. Ограничение схемы - нельзя явно завести дату окончания ставки в будущем, если еще неизвестно какая ставка будет после. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 14:19 |
|
Как организовать работу со справочником процентных ставок?
|
|||
---|---|---|---|
#18+
Сабж не стоит выеденного гроша. Если не предусматривается прорех в %-ставках, достаточно одного поля с датой. Одного, Карл ! :) Вычислять простейшим запросом (в функции). T-SQL: SELECT top 1 percent from.... WHERE perc_date <= @date_to order by perc_date desc ... |
|||
:
Нравится:
Не нравится:
|
|||
18.02.2016, 15:02 |
|
|
start [/forum/topic.php?fid=33&fpage=10&tid=1547394]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
28ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 40ms |
total: | 165ms |
0 / 0 |