Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить раз и навсегда / 10 сообщений из 10, страница 1 из 1
05.07.2002, 15:18:48
    #32035343
Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Многоуважаемые разработчики баз данных!

У меня к Вам следующий вопрос.
Каким образом рациональнее (правильнее) реализовывать следующее:
1. есть таблица допустим с полями Наименование официальное (НО) и Наименование собственное (НС)
2. НО является периодическим атрибутом, т.е. с момента внесения записи до какого-то момента оно имело одно значение, с какого-то момента времени - другое и т.д. Т.е. в отчет в одном временном промежутке попадет одно наименование, в другом - другое
3. надо чтобы было известно кто и когда менял значения НО и НС (не последние изменения делал, а чтобы можно было всю историю изменений значений полей просмотреть)
4. кто и когда помечал запись на удаление или снимал эту пометку.
Как это все реализовать?
Каким запросом получить действующие в указанном диапазоне дат значение полей и что выдавать, если в этом диапазоне запись имела два значения, т.е. была изменена в указанном диапазоне.

Заранее огромное спасибо за цельные советы и обсуждение.
...
Рейтинг: 0 / 0
05.07.2002, 15:32:55
    #32035346
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
create table MainTable(NO_ID int null,Name_S VarChar( 50 ))
create table NO (NO_ID,NAME_NO varchar( 50 ),dateCreate dateTime,dateDelete dateTime null)

Делаеш связку MainTable.NO_ID - NO.NO_ID 
Допустим, что в 

тбл MainTable лежат записи 
 1 ,name
 2 ,name2
тбл NO
 1 ,NO1, 01 . 01 . 2002 ,null 
 2 ,NO2, 01 . 01 . 2002 , 01 . 02 . 2002 
 2 ,NO3, 01 . 02 . 2002 ,null

т.е. второе имя было изменено ...


тогда получить данные можно :


Select (select NAME_NO from NO where NO.no_id = MainTable.no_id and dateDelete is null),
   name_S
   from MainTable
...
Рейтинг: 0 / 0
05.07.2002, 15:55:51
    #32035349
Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
А если необходимо получить значение на период 01.01.02-01.03.02 что получится?
А если user сменит дату начала действия значения в NO3, то надо искать запись предыдущую и менять там dateDelete?
А как реагировать на ситуацию не появления нового значения NO, а просто допустим изменения ошибки при первоначальном внесении значения этого поля?
...
Рейтинг: 0 / 0
06.07.2002, 19:06:21
    #32035416
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Cdate DateTime
HostName char(32)
UserName char(32)
OldValue char(..)
NewValue char(..)

И вставлять в нее данные из тригера на обновление-удаление.

А Вы вообще-то про MS SQL справшиваете?
Там вроде пометок на удаление нет.
...
Рейтинг: 0 / 0
08.07.2002, 13:11:08
    #32035549
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
>>>А если необходимо получить значение на период 01.01.02-01.03.02 что получится?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
delare @Ondate dateTime

Select (select NAME_NO 
   from NO 
   where NO.no_id = MainTable.no_id 
      and @Ondate between dateCreate and isnnull(dateDelete,getdate())),
   name_S
   from MainTable

>>>А если user сменит дату начала действия значения в NO3, то надо искать запись предыдущую и менять там dateDelete?

ну чтож теперь , надо следить !

>>>А как реагировать на ситуацию не появления нового значения NO, а просто допустим изменения ошибки при первоначальном внесении значения этого поля?
транзакцией ...
...
Рейтинг: 0 / 0
08.07.2002, 15:23:01
    #32035602
Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Cat2!

Для пометки удаления будет выделено соотвествующее поле - весь вопрос в том, как отследить кто помечал на удаление, кто восстанавливал.
Очень хотелось бы что-бы еще кто-нибудь поделился тем как он все подобное реализует.
Например у нас предлагают записи с периодическими атрибутами хранить в той же таблице, а не в связанной.
Что будет оптимальнее, что будет правильнее?
Т.е.
IDObj IDRec NO DateModify
1 1 Что-то 01.01.02
1 2 Что-то новое 01.02.02
1 3 Что-то еще новее 01.03.02
...
Рейтинг: 0 / 0
08.07.2002, 15:27:35
    #32035606
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Так тоже неплохо , в этом случае в таблице надо сделать поле UserCreate и писать туда SUSER_SNAME()
и все ...
...
Рейтинг: 0 / 0
08.07.2002, 16:31:39
    #32035620
Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Только вот не совсем понятно, как выяснять кто пометил запись на удаление и кто ее восстановил? Получается, что при пометке на удаление и восстановлении придется создавать две записи - первая хранит то, что как бы удалили и информацию об удаляющем, а следующаяя будет содержать все смысловые поля скорее всего неизмененные (даже точно не измененные - не давать же право редактировать помеченную на удаление запись) и информацию о восстанавителе записи. Получается, что безопасность требует жертв и приличных.
Может у кого есть более элегантный способ?
...
Рейтинг: 0 / 0
08.07.2002, 16:40:42
    #32035622
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Давай проще делать , добавим еще одну таблцу и начинаем писать туда журнал событий ...
...
Рейтинг: 0 / 0
08.07.2002, 17:26:32
    #32035635
Дмитрий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите решить раз и навсегда
Да, скорее всего кто изменял значение периодического атрибута лучше хранить в той же таблице (то есть в принципе хранить автора записи - создал запись - информ. о тебе сохранилась, изменил значение периодического атрибута следовательно создалась новая запись и в ней снова информация о создателе), а кто изменял ошибочное значение периодического или обычного атрибута, помечал на удаление или восстанвливал запись, проводил документ, перепроводил, отменял проведение - лучше сохранять в отдельных таблицах для "разбора полетов". Кажется это будет оптимальным, осталось только придумать как он должен выглядеть и каким образом с ним будет удобнее всего работать.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите решить раз и навсегда / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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