Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
Здравствуйте!
Нужно сделать логирование действий пользователя, которые он делает в профайле.
В профайле у чувака есть 4 вкладки.Каждая вкладка это отдельная таблица.
Xувак может редактировать одновременно только 1 вкладку - и следовательно одновременно ложиться запись в 1 таблицу.
Были созданы 4 логирующих таблицы в которые заносятся те записи которые изменялись- обычная схема все те же поля которые есть в основной таблице + пару дополнительных.
В каждой логирующей таблице есть поле log_id которое identity
Так вот задача состоит в том что на сайте показывать те записи которые изменялись(количество правок) и при нажатии на две измененные записи увидеть только те данные которые поменял пользователь(какие данные были и на что он поменял).
Было добавлена связующая таблица которая по идеи(как я хотел) должна связывать все эти четыре таблицы
все таблицы можно связать по уникальному ключу -id.
Когда делается изменение в таблице table - новая запись ложиться в логирующую таблицу log_table. В таблице log_table срабатывает тригер который инсертит log_id этой записи в связную таблицу connected и при этом заносятся логирующие индетнификаторы (log_id) последних записей конкретного (id) пользователя остальных трёх логирующих таблиц в таблицу connected.
Проблема возникла в самом начале:)
если записей ещё в логирующей таблице нету - нету откуда брать log_id :)
В общем самый простой способ занести все записи с основных таблиц в логирующую - не подходит так как в дальнейшем нужно будет удалять записи с логирующих таблиц. Тут скорей всего возможно не правильная реализация или возможно нужно написать правильно тригер для логирующих таблиц, и если нету записей в логирующих таблицах брать их с основных.
Вот с етим то у меня и проблема. Получаеться тригер вызывает сам себя(что то в этом вроде)
Я надеюсь на вашу снисходительность к бедному начинающему базисту и подсказки с вашей стороны :)
30 июл 12, 12:19    [12933752]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
одна таблица лога на всё, ключ ид_профайла, номер вкладки как поле
30 июл 12, 13:41    [12934444]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
что самое интересно в самом начале я так и делал, но мне сказали что это плохая идея, честно говоря не помню почему.
Но есть одно но: на одной вкладке у нас выводиться просто набор чек боксов и когда выбираешь пару штук они ложатся следующим образом:
таблица table которая имеет два поля
id (идентификатор клиента) int
link_id (ссылка на связующую надпись)int
то есть если зачекать все чекбоксы( а их около 250 штук)
занесется 250 строк В таблицу table
то я так полагаю нужно будет сделать 1 логирующую таблицу которая будет иметь около 400 полей? (+ ещё записи из трьох таблиц)?
30 июл 12, 14:27    [12934845]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Nelly_lucky
честно говоря не помню почему
Скажите уже сразу:
- Честно говоря не хочу учиться программировать, и вообще программировать.

Сначала надо научится понимать что происходит, видеть процессы. А потом можно и программировать это.
По другому никак, халтура здесь не прокатит.

Нормальный проггер может придумать несколько десятков вариантов решений, он не боится придумать неправильный вариант, он не боится перебрать их все, пусть они даже могут казаться идиотскими.

Фантазируйте. Перебирайте.
Nelly_lucky
но мне сказали что это плохая идея
Не обращайте на это никакого внимания, совершенно. Вы сама хозяйка ваших решений.

Перебрав тысячи неправильных решений, вы будете сами знать почему они плохие/хорошие.

Не взваливайте на себя много задач, разбейте эту на маленькие и решите одну из них многими способами и обязательно получите от этого удовольствие.
30 июл 12, 22:25    [12937438]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
Mnior - спасибо вам за поддержку:))

Mnior
Вы сама хозяйка ваших решений.

я парень)

А по поводу плохого решения в одной логирующей таблице:
если будет одна логирующая таблица - прийдётся делать 400 полей для неё, и при изменении данных в одной основной таблице - просто дублируются данные с трех основных таблиц в таблицу логирования, что чревато избыточностью и потерей огромного количества дискового пространства
31 июл 12, 11:44    [12939340]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
Помогите решить одну проблему
Это тоже связанно с логированием:
Есть основная таблица table_region вида:
ID_company int(),
id_regions int(поле FK ведет на таблицу с регионами на уникальное поле региона, а этих регионов около 200 штук)
так вот на сайте на четвертой вкладке у чувака в профайле есть 200 чекбоксов, когда он чекает хотя бы 1 чекбокс и нажимает save в базу ложиться такая запись:
ID_company id_regions
1 200
Соответственно ID_company - это индентификатор компании чувака, а id_regions - индентификатор того региона которого он выбрал на сайте.
Если он зачекает второй какойто чекбокс на той же вкладке и нажмет save, то происходит следующее:
все записи с таблицы table_region удаляються для даной id_company и заносяться те, которые зачеканны
запись будет следующая в таблице table_region
ID_company id_regions
1 200
1 260
и таким образом может быть около 200+ записей вида : id_company -id_regions(для одного профайла чувака)

Есть таблица логов log_table_region :
ID_company int
,id_regions int
,version
При вставке в таблицу table_region срабатывает тригер на insert который загоняет данные в таблицу log_table_region и проставляет версию вставки(select ISNULL(Max(version),-1)+1 from [log_table_region ] where inserted.[id_company] = table_region .[id_company]))
Так вот есть страничка на которую я вывожу количество правок(количество версий) и на этой же страничке я могу их сравнить(чем данные одной версии отличаются от другой)
вот с этим у меня проблема.
У меня был опыт с таблицей похожей на таблицу table_region - table_type (в которой было так же 2 поля, первое показывало индентификатор компании, а второй индентификатор типа компании)
Всего типов компании есть 9:)
Это работает следующим образом:
Обьявляються 18 перемённых (попарно для версий первой и сторой. Девять переменных для 1 версии и 9 переменых для другой)и в них делаю выборку по наличии записи в таблице table_type.(если есть запись то присваиваем переменой значение 1 иначе 0) Потом сравниваю эти переменные между собой и если они отличаются -вывожу это поле и его значение
А что делать когда типов не 9 а 200+ ? как правильно поступить в таком случаи?
31 июл 12, 12:50    [12939903]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5114
Nelly_lucky
...если будет одна логирующая таблица - прийдётся делать 400 полей для неё...
зачем??
31 июл 12, 12:54    [12939941]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
Дедушка
Nelly_lucky
...если будет одна логирующая таблица - прийдётся делать 400 полей для неё...
зачем??

Хранить состояние изменения для 4 таблиц , что бы потом сравнить эти изменения между собой
31 июл 12, 13:10    [12940135]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
офигеть
Guest
вот манеры у некоторых, логирование в ширину разворачивать.
делают и правда 400*3 полей:

параметр1, предыдущее_сост1, текущее_сост1, параметр2, предыдущее_сост2, текущее_сост2,...,
параметр400, предыдущее_сост400, текущее_сост400

а потом еще хотят отчет, и выборку не всех столбцов, а только где есть значения, отличные от NULL.
колонки в отчете NOT NULL!
а слабО СРАЗУ развернуть в вертикаль???

ид_параметр, предыдущее_сост, текущее_сост.

хочется писать пустые состояния, пожалуйста.
и зафильтруйся, хоть и по NOT NULL...
31 июл 12, 13:37    [12940421]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
Есть идеи по поводу логирования таблицы log_table_region?
возможно немного поменять структуру нужно или ....
Суть такова что бы при сравнении двух изменений выводить только те поля которые отличаются в двух версиях
Я так понимаю нужно это делать динамикой, а там у меня как раз и возникает проблема с таблицей регионов
1 авг 12, 00:49    [12943799]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Nelly_lucky
Есть идеи ...?
Это у вас должны рождаться идеи.

Мой пост не дошёл до сознания. Безнадёжно. Вычёркиваем.
Ок. Хоть попытался.
1 авг 12, 19:54    [12948880]     Ответить | Цитировать Сообщить модератору
 Re: Логирование связаных таблиц  [new]
Nelly_lucky
Member

Откуда:
Сообщений: 34
да всё таки родилось парочку ......
возможно немного криво, но работает
2 авг 12, 10:21    [12950453]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить