Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность записей, как организовать / 12 сообщений из 12, страница 1 из 1
02.07.2013, 21:00
    #38317780
SlaveOwner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
По версионности есть много вопросов, как организовать. Приведу простой пример:
1. Имеется справочник пользователей
Код: plsql
1.
T_USER (USER_ID, USER_FAM, USER_NAME)


2. Имеется например журнал реализаций - ШАПКА
Код: plsql
1.
T_OUTPUT_HEAD(OUTPUT_HEAD_ID, OUTPUT_DATE, USER_ID)



например пользователь была до 12.01.2013 ИВАНОВА, а затем вышла замуж и сменила фамилию на ПЕТРОВА
в журнале реализаций должно быть так же отображение операций, до 12 ИВАНОВА, а затем ПЕТРОВА

я реализовывал всегда так: делал таблицу изменений, например
Код: plsql
1.
T_USER_CHANGE(ID, USER_ID, CHANGE_DATE, USER_FAM, USER_NAME)


и через ХП в запросах передавая дату и ID выбирал актуальную на тот момент информацию.

Есть какое либо еще решение этой задачи, т.е. отображать инфу согласно указанной даты и на указанную дату?
Или, кто как реализовывает решение таких задач?
...
Рейтинг: 0 / 0
02.07.2013, 21:06
    #38317787
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
SlaveOwnerчерез ХП в запросах передавая дату и ID выбирал актуальную на тот момент
информацию.
Двумя темами же ниже:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1032290&msg=14502438 и можно
обойтись простым join по between, без всяких ХП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.07.2013, 21:30
    #38317817
SlaveOwner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Dimitry Sibiryakov,

Дмитрий, на пальцах можете отобразить какая будет схема в этом конкретном случае?
...
Рейтинг: 0 / 0
02.07.2013, 21:34
    #38317820
SlaveOwner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Dimitry SibiryakovSlaveOwnerчерез ХП в запросах передавая дату и ID выбирал актуальную на тот момент
информацию.
Двумя темами же ниже:
http://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1032290&msg=14502438 и можно
обойтись простым join по between, без всяких ХП.


В этом случае мне все понятно, а вот с моим примером нет
...
Рейтинг: 0 / 0
02.07.2013, 22:07
    #38317855
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
SlaveOwnerВ этом случае мне все понятно, а вот с моим примером нет

Замени Coef на USER-FAM, USER_NAME. Остальное останется тем же самым.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
02.07.2013, 22:28
    #38317866
SlaveOwner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Dimitry SibiryakovSlaveOwnerВ этом случае мне все понятно, а вот с моим примером нет

Замени Coef на USER-FAM, USER_NAME. Остальное останется тем же самым.


Т.е. фактически нужно делать вторую таблицу для изменений?
Код: plsql
1.
T_USER_CHANGE(ID, USER_ID, CHANGE_DATE, USER_FAM, USER_NAME)



как я и писал? или это все можно в одной реализовать?
...
Рейтинг: 0 / 0
02.07.2013, 22:50
    #38317880
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
SlaveOwnerкак я и писал?

Да, только структура у тебя там не ахти. Как я и писал: делай два поля на границы действия
и можно обойтись без ХП.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
03.07.2013, 00:43
    #38317973
SERG1257
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
У двух полей (при том что выборка явно быстрее, особенно если индексировать D_END и заполнять его будущей датой) есть недостаток в целостности. То есть возможны накладки и дыры. Придется делать периодические проверки (на триггер тоже надежды мало).

В чем проблемы сделать запрос

Код: sql
1.
2.
3.
4.
5.
alter table t_user_change add constraint unique(user_id, change_date)

select * from t_user_change t1
where t1.user_id=:my_user_id
and change_date=(select max(change_date) from t_user_change t2 where t2.user_id=t1.user_id and t2.change_date<:mydate)
...
Рейтинг: 0 / 0
03.07.2013, 07:58
    #38318064
Dvm_home
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Dimitry SibiryakovSlaveOwnerкак я и писал?

Да, только структура у тебя там не ахти. Как я и писал: делай два поля на границы действия
и можно обойтись без ХП.


Зачем заводить отдельное поле для хранения даты окончания действия значения?
По моему той структуры что привел SlaveOwner вполне достаточно и SERG1257 прав по поводу поддержания целостности
...
Рейтинг: 0 / 0
03.07.2013, 08:36
    #38318080
SlaveOwner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Отсюда следует, что даже при первой вставке в таблицу T_USER нужно например на тригер TR_USER_CAHNGE_AI делать вставку в T_USER_CHANGE, т.к. согласно запроса должна быть там запись хоть одна на каждую версию
...
Рейтинг: 0 / 0
03.07.2013, 11:26
    #38318327
LSV
LSV
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Сделайте ф-цию извлечения фамилии с параметром "на дату".
Можно будет вычислить и текущую и старую фамилии.
Разумеется, что история Фамилий должна где-то храниться.

зы:
- А какая ваша предыдущая фамилия ?
- Иванов.
(с) еврейский анек
...
Рейтинг: 0 / 0
03.07.2013, 13:02
    #38318558
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Версионность записей, как организовать
Dvm_homeЗачем заводить отдельное поле для хранения даты окончания действия
значения?
Потому что в этом случае запросы получаются проще и работают быстрее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Версионность записей, как организовать / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]