
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
02.09.2014, 16:03
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
Здравствуйте! Ранее изменения в таблицах учетной системы хранились в единой таблице изменений в формате "ИмяТаблицы-ИмяПоля-СтароеЗначение-НовоеЗначение-Автор-ОтметкаВремени". И, в общем-то, все было хорошо до тех пор, пока не понадобилось иметь возможность посмотреть "слепок" данных на любую дату. Дано - базовая таблица вида (к примеру - справочник): Код: sql 1. 2. 3. 4. 5. 6. 7. 1. Возможность просмотра состояния БД на любую дату. 2. Минимальные изменения в структуре БД, возможность автоматизации процесса (скрипты и т,д.), сохранение бизнес-логики. Предлагаемое решение: Дату для "слепка" задать через контекстную переменную. Исходную таблицу модифицировать: Код: sql 1. 2. 3. 4. Код: sql 1. 2. 3. 4. 5. 6. Значения из базовой таблицы в таблицу истории переносим в триггере AIU базовой таблицы. Для выборки данных из таблицы создаем изменяемый просмотр, на который переключаем все обращения к базовой таблице: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Может, я чего не учел? :-0 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 16:28
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
В спойлеры не заглядывал. У меня историчность делается на трех дополниительных полях таблиц с датами: begin_date not null, end_date null, sp_end_date not null (последний заполняется триггером исходя из end_date). Пользователь не нужен пока что. Удалить нельзя, можно только выставить end_date и добавить новую строку с begin_date = (prev)end_date+1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 16:54
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
wadmanbegin_date not null, end_date null,А какой смысл в диапазонах, если по смыслу одно значение должно сменять другое? Достаточно же по идее только даты вступления в силу значения. Или за счет этого Вы разрывы (отсутствие данных) в промежутке времени отслуживаете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 16:55
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
Kirill RazuvaevА какой смысл в диапазонах, если по смыслу одно значение должно сменять другое? Для индекса по sp_end_date. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 16:58
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
wadmanKirill RazuvaevА какой смысл в диапазонах, если по смыслу одно значение должно сменять другое? Для индекса по sp_end_date.А в чем разница между двумя последними полями? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 17:00
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
Kirill Razuvaevwadmanпропущено... Для индекса по sp_end_date.А в чем разница между двумя последними полями? wadmanend_date null, sp_end_date not null (последний заполняется триггером исходя из end_date) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 17:03
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
Честно говоря я и не помню уже деталей и преимуществ этой схемы (три даты вместо одной). Придумал не я, но в свое время погонял её, результатом остался доволен и теперь безусловно её применяю. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.09.2014, 20:03
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
Нафига нужен sp_end_date я тоже не понял, а две даты вместо одной удобны тем, что позволяют выбрать "конец" сразу, одним запросом, без доп.запроса (ну или без EB). Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2014, 09:17
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
Гаджимурадов РустамНафига нужен sp_end_date я тоже не понял Вот так делается: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Гаджимурадов Рустама две даты вместо одной удобны тем, что позволяют выбрать "конец" сразу, одним запросом, без доп.запроса (ну или без EB). Верно, без ограничения выборки, если брать до определенной даты и сразу одной строкой. Экономия... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2014, 10:13
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
wadman> Вот так делается Я не про триггер говорил, он итак очевиден, а про два идентичных поля. wadman> Верно, без ограничения выборки, если брать до определенной wadman> даты и сразу одной строкой. Экономия... Нет там никакой экономии и пр., любые выборки - активная, активная на дату, до даты, последняя и даже предпоследняя, предыдущая и пр. - можно получить и без второго поля. А само второе поле нужно именно для *информационных* целей, а не для фильтра - чтобы когда понадобится не лезть в таблицу второй раз и не выбирать сразу 2 строки - эдакая мини-денормализация. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2014, 10:27
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
Гаджимурадов РустамЯ не про триггер говорил, он итак очевиден, а про два идентичных поля. Уже не помню "очевидных преимуществ", которые поведали об этой схеме. end_date null зачем-то нужен был той системе, где такая схема использовалась, т.к. внутрях используется исключительно sp_end_date и иногда begin_date. P.S. Не показывать-же пользователю дату 01.01.3000 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2014, 10:28
|
|||
|---|---|---|---|
История значений - покритикуйте решение |
|||
|
#18+
wadmanт.к. у меня внутрях ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.09.2014, 13:58
|
|||
|---|---|---|---|
|
|||
История значений - покритикуйте решение |
|||
|
#18+
wadman> P.S. Не показывать-же пользователю дату 01.01.3000 Это, конечно, от конкретного бизнес-случая зависит, но пользователю обычно вообще конечную дату не нужно показывать, а чаще всего - вообще только 1 запись - активная "на сегодня" или "на дату". Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=40&tablet=1&tid=1563362]: |
0ms |
get settings: |
8ms |
get forum list: |
17ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
1ms |
| others: | 233ms |
| total: | 502ms |

| 0 / 0 |
