powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Протоколирование изменений в БД
69 сообщений из 69, показаны все 3 страниц
Протоколирование изменений в БД
    #33225528
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я хочу организовать следующее: при изменении какого-либо поля в какой-либо таблице в клиенте вызывается хранимая процедура, в которую передаются через параметры сведения о имени таблицы, над которой работают, название поля, предыдущее значение, которое передается двумя параметрами: тип и двоичное поле (для возможности хранить данные разных типов), ну и джругую полезную информацию.
Целесообразен ли такой механизм или есть более функциональные методы?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225554
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
AlexG или есть более функциональные методы?

или есть -


научитесь излагать свои мысли в терминах и определениях предметной области, которой посвящаете свои изыскания...
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225597
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBWили есть
Что есть-то?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225819
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЧто есть-то?
Есть более функциональные :))

Например на каждую таблицу, которую нужно мониторить, создать копию - но в отдельной базе например, или в этой же, но со спец. именем, чтобы случайно не грохнуть. Потом повесить триггеры, которые и будут отписывать все действия.
Ну еще одну таблицу на все, в которой будет писаться, кто и что делал и ссылка на нее из таблицы-дубля, чтобы в каждой не плодить поля "юзер, дата, действие и т.д."

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

В общем, время найду - сделаю и сайтец забабахаю.

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225843
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225856
Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами.
Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225873
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> В SQL возникнет туева хуча с трудом разгребаемых траблов.

Например?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225876
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дураг с инецеативой Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами.
Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов.

А в чем сие траблы заключатся?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225877
Andres 1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дураг с инецеативой
Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов.
Да. Что-то будет проще (например, выбрать данные "всё как было 13 числа" или "как часто Боря менял паспорта и фамилии"), что-то станет сложнее (почти всё остальное:)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225890
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> что-то станет сложнее (почти всё остальное:)

Что "все остальное"? Примеры - в студию.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225908
2 guest_20040621
У Вас есть обратные примеры?
http://www.dbpd.com/vault/9810snod.html
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33225993
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> http://www.dbpd.com/vault/9810snod.html

Ну и где траблы?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33226240
vybegallo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Informix для этого есть подсистема аудита. То, что вы предлагаете, возможно и будет работать, но ресурсов сожрет немало.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33226292
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexG ну и джругую полезную информацию
И кому эта информация будет интересна? А самое главное чем?
Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33226856
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Laox AlexG ну и джругую полезную информацию
И кому эта информация будет интересна? А самое главное чем?
Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку?
Для банка нужно, видимо...
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33226964
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.

В БАС сделали в рабочих таблицах поле DateUser, KodUser, в которые заносятся данные о последних корректировках. Этих данных почти достаточно для выяснения всех спорных систуаций. Но так же нет сведений об удалении.

Обходимся путем сравнения с BackUp. Он все равно делается автоматически. Без таких копий все равно работать не прилично. Если уже возникает острая необходимость найти виноватого, то скорее всего шкода такая, что потребуется поднять архивы. Из них видно - что было и что стало. А кто - выясняется в рабочем порядке.

А еще каждая хранимая процедура, вызываемая из клиентской машины, имеет параметр KodUser. Если важно то, что она делает, то может занести в журнал работы. На практике тотальная слежка сделана только в одном случае: на рабочем месте кассира по приему платежей от населения, что бы можно было обойтись без кассового аппарата.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33227267
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33227862
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если валить в одно место логи на редактирование/удаление с разных таблиц, то это будет помойка, в которой черт ногу сломит. Ведь если появилась мысль о логгировании изменений, значит это кому то нужно. А следовательно на эту таблицу с логами надо навершивать интерфейсы для просмотра, всякие фильтры и и отчеты, причем такие, чтобы пользователи понимали об чем речь, собственно говоря.
На мой взгляд универсализация в этом месте ни к чему хорошему не приведет. Для каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete, кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи.
Практика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно".
Полное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228148
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321 PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет)Это чудо MS SQL 2000. Windows Authentication.
Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228334
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LaoxДля каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete,
Это проблемы прав в системе, а не логирования
автор кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи.
И это тоже.
авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно".
Вы по-русски уж, а то бред какой-то, особенно про удаление.
авторПолное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий.
А вот это правильно. Так и надо делать. И я так и делаю. :)

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228393
4321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PVPЭто чудо MS SQL 2000. Windows Authentication.
Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted?мдя. Мои саболезнования. А что, кстати сказать, вернет
SELECT CURRENT_USER
в этом случае?
(любопытно, простите, - давненько я Т-скуль не ковырял)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228476
YBW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBW
Гость
tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно".
Вы по-русски уж, а то бред какой-то, особенно про удаление.
-- Tygra's --

ИМХО типовая схема типовой подход - и так все понятно
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228631
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBW tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно".
Вы по-русски уж, а то бред какой-то, особенно про удаление.
-- Tygra's --

ИМХО типовая схема типовой подход - и так все понятно

Ну видимо товарисчу требуетсяч перевод:
1. "Кто папа" - означает "кто последний редактировал запись". В том случае, если имеется n (где n>1) равноправных пользователей, которые могут изменять некоторое поле, неважно знать какое значение было раньше, но важно знать кто последний выполнил апдейт.
2. "Кто накосячил" - означает "кто удалил эту сверхважную запись". В том случае, если имеется n (где n>1) равноправных пользователей которые могут удалять записи, но есть при этом один суперпользователь, который принимает окончательное решение об удалении записи, важно, чтобы случайно не удалили нужную запись. В этом случае простые пользователи ничего не удаляют, а только скидывают в "корзину". А уже суперпользователь выполняет аудит этой корзины и окончательно принимает решение об удалении или восстановлении той или иной записи.
К каждой таблице хистори вешать - замучаешься таблицы создавать :)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33228881
Фотография PVP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4321А что, кстати сказать, вернет
SELECT CURRENT_USER
в этом случае?Он вернет dbo
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33229297
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНу видимо товарисчу требуетсяч перевод:
Точно! :))

Тока я не вижу смысла в таком виде якобы "логирования". Лучше ничего, чем так.

авторК каждой таблице хистори вешать - замучаешься таблицы создавать :)
Так хранимую процедуру напишите да и все. Вы что же, руками чтоли создаете?
Зачем уж так. У меня все из интерфейса - список таблиц, какую нужно логировать, нажал на кнопочку - все создалось, и таблица истории, и триггеры, и все что нужно. И даже пишется лог, когда и кто запустил/остановил логирование. И можно посмотреть лог изменений по дате.

ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче.

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33229305
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
suser_sname() вернет нужного юзера без проблем.

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33229432
CREATE TRIGGER journal_delete
ON dbo.JOURNAL
FOR delete
AS
insert into logjournal (NREC,NOMER,DATA,FIO,AGE,CKLKONTR,POLIS,DNA,DKO,VALID,TELADR,DIAGNOZ,
ZAMPO,CKLPROVIDER,STAM,DISP,SUMMA,VAL,CASH,STATUS,VREMK,MESTO,COMNAME,
CKLSTRANA,CTUR,VDATE,FIO_ENG,PRIM,OB_DIAG,
DE,KOGDA,KTO,OTKUDA)
select NREC,NOMER,DATA,FIO,AGE,CKLKONTR,POLIS,DNA,DKO,VALID,TELADR,DIAGNOZ,
ZAMPO,CKLPROVIDER,STAM,DISP,SUMMA,VAL,CASH,STATUS,VREMK,MESTO,COMNAME,
CKLSTRANA,CTUR,VDATE,FIO_ENG,PRIM,OB_DIAG,
'Удаление',getdate(),system_user,host_name()
from deleted

Вот пример тригера на удаление. (на живой базе работает прекрасно.
и возвращает и Доменное имя пользователя и Компьютер с которого было совершено удаление.
MS SQL 2000 - SP3 (8.00.760)

нет ни каких проблем при WinAut!
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33238734
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-моему вопрос не в протоколировании изменений, а в том, что собственно нужно протоколировать. А всякие академические споры, можно ли это сделать на триггерах или на процедурах или вообще не делать - так это фигня. В зависимости от сервера БД можно реализовать практически все что нужно.
негатиф, незачот, афтар не пеши больше.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33239320
AlexG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Валентин КПо-моему вопрос не в протоколировании изменений, а в том, что собственно нужно протоколировать. А всякие академические споры, можно ли это сделать на триггерах или на процедурах или вообще не делать - так это фигня. В зависимости от сервера БД можно реализовать практически все что нужно.
негатиф, незачот, афтар не пеши больше.
Вообще-то требование именно такое: хранить все изменения любого поля, проводимые над акционерами; иметь возможность откатить на любую дату, просмотреть кто сделал изменение данного поля и пр. и пр.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33239461
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда сделать отдельную таблцу, где хранить имя атрибута, юзера и датувремя изменений, вобщем полный хистори над таблицей.
Если это глобальная шиза, тогда все справочники хранить по Тецнеру и соответственно также привязать историю.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33240423
BrokenPot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как это - "по Тецнеру"? (Или по Тенцеру?)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33253418
Gary
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня реализовано нечто похожее на предложенное Тигрой и Первым Андерсом

1. На каждую таблицу создается ее слепок (Customer -> CustomerHistory etc)
Она имеет все поля, как оригинальная, плюс ДВА новых: ValidFrom и ValidTo
PrimaryKey - identity, первичный ключ из оригинальной таблицы - кластерный во таблице истории, альтернативный ключ - первичный ключ из оригинальной таблицы плюс ValidFrom и ValidTo.
2. На оригинальной таблице пишем триггеры.
Вставка пишет в поле ValidFrom значение GETDATE(), а в ValidTo - 01/01/3000 (баг 3000 заложен в дизайне!)
Удаление записи вызывает делает следующее: для записи с тем же ключом, что в главной таблице, имеющей ValidTo равное 01/01/3000, ValidTo выставляется в GETDATE().
Изменение любого поля вызывает два действия: сначала алгоритм для удаления, а потом для вставки.

Таким образом, чтобы получить
текущее состояние, надо принести записи с ValidTo 01/01/3000
состояние на конкретную дату MyDate BETWEEN ValidFrom AND ValidTo

В моем проекте я поддерживаю историю для 10-и таблиц, нареканий по скорости не было. Правда, дата в них не меняется очень часто, экстремальных нагрузок не проверял. Задача была связать заказ с ценой заказа на момент его выполнения (под ценой подразумевается еще туча характеристик, которые невыгодно хранить в истории заказа). Запрос на миллионах заказов нареканий не вызывал.


Второе решение еще проще. Сходите на сайт www.apexsql.com, продукт ApexAudit, если не ошибаюсь
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33261595
goodron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tygra авторНу видимо товарисчу требуетсяч перевод:

ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче.

-- Tygra's --
Ну давай уже выложи! А то все обещаешь, да обещаешь... Мне вот, например, было бы очень интересно посмотреть.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262011
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262218
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Почитайте очень грамотную статью

А чего здесь грамотного, можно поинтересоваться? Бред, абсолютно оторванный от реальности.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262307
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621

А чего здесь грамотного, можно поинтересоваться? Бред, абсолютно оторванный от реальности.

О! Узнаю мощный голос guest_xxx... Поинтересоваться то можно - но вы же опять ничего конкретного в ответ не скажите

В статье описаны возможные способы организации аудита изменений данных. Под аудитом здесь понимается именно административные средства контроля за данными и к самой архитектуре системы он отношения не имеет. Статья написана для DBA MS SQL сервера, но многое из нее актуально и для других СУБД
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262341
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> О!

Я тоже рад Вас слышать.

> В статье описаны возможные способы организации аудита изменений данных.

...абсолютно непригодные для реального применения.

> и к самой архитектуре системы он отношения не имеет.

Ну почему же? Там вроде было что-то о том, что регистрировались изменения, вносимые пользователями в структуру данных. Хотя, может, и невнимательно читал (жутко неудобно оформлено).

> Статья написана для DBA MS SQL сервера

Для dba? Не смешно. Для студентов первого курса, - это как бы более целевая аудитория.

Собственно, просмотрел текст по диагонали исключительно для того, чтобы иметь представление о том, что это за очень грамотные статьи - и бесплатно. Оказалось - как обычно - бред по мотивам мануалов. Лучше Шуклина читать, - смешнее.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262471
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriПочитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml

Приятная статья, правда ниасилил, за время, которое я уделяю на чтение новостей.
Хорошо проделанная работа по сбору информации, стиль - присущий женскому обществу - простой и практичный.

Комментарии.
Изменение метаданных и изменение данных - я считаю вопросами разными с различным подходом в логировании.

метаданные.
Меня поразила прозаичность решения - сравнить 2 базы, чтобы узнать изменения... кто же так пишет проекты? база данных - это что мусорная куча, куда лезут все кому не лень и меняют структуру, бизнес логику?
По моему логировать должны программисты сами, указывая что они для конкретной задачи меняли с кратким описанием. Тогда это будет нормальная хистори.

данные.
Единственный совет любителям логирования - не перебарщивайте. Концепцию логирования естественно нужно делать на самом высоком уровне централизации лог-событий. Но не стоит включать логирование всего и вся, без причины на это. Поскольку все это утяжеляет работы БД, ее размер и прочее. Всегда нужно искать компромис между скоростью и функционалом, производительностью и стоимостью... немого отвлекся в сторону философии, но так и есть на самом деле...
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33262472
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сорри не в тот топик...
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33264608
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
goodron tygra авторНу видимо товарисчу требуетсяч перевод:

ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче.

-- Tygra's --
Ну давай уже выложи! А то все обещаешь, да обещаешь... Мне вот, например, было бы очень интересно посмотреть.

Времени нет, умираю от работы!!!!!!!!!!!!!!!!!
Даже форум раз в три дня читаю - вот до чего дошел! :)

Обесчаю в октябре выложить. Прямо-таки торжественно клянусь. Со всеми скриптами и т.д. Прямо рабочую систему.

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33266304
M.Kap.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriПочитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml

Еще не дочитал. Но статья показалась интересной хотя бы с точки зрения систематизации подходов.

А вот такой вопрос к уважаемой аудитории. Задачу "журналирования" отдельных записей можно расширить до сохранения версий совокупности записей.

Пример из банковской сферы:
Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма).
График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д.

Конечно же версии совокупности записей можно восстановить по версиям записей из этой совокупности. Подобная задача решалась мною и решение оказалось довольно громоздким.

Что вы об этом думаете ?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33266494
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Задачу "журналирования" отдельных записей можно расширить
> до сохранения версий совокупности записей.

Это не расширение задачи. Это один из способов ее постановки.

Любая база данных должна позволять извлекать состояние объектов на определенную дату.

> Конечно же версии совокупности записей можно восстановить по
> версиям записей из этой совокупности.

Я бы решил эту задачу, описав погашение кредита как процесс. Не вижу проблем.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33266523
M.Kap.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621>
Я бы решил эту задачу, описав погашение кредита как процесс. Не вижу проблем.

в двух словах , как ты это видишь?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33267022
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> в двух словах , как ты это видишь?

Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33267051
M.Kap.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> в двух словах , как ты это видишь?

Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса.

спасибо, посмотрю.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33267077
M.Kap.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621> в двух словах , как ты это видишь?

Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса.

А чем отличаются IDEF1, IDEF2. И вообще, это методология проектирования альтернативная UML ?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33267172
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> А чем отличаются IDEF1, IDEF2.

idefinfo.ru
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33267228
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему это уже флуд, а не обсуждение темы. Для решения такого элементарного действа, как методы логирования на практике все выросло в ахтунг какой-то....
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270061
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
M.Kap.

Берем любую подходящую нотацию (например, IDEF3).

Уважаемый guest_xxx не считает важным упомянуть что IDEF'ы никакого отношения к OOA/OOD не имеют так что если у вас они, то придется еще и изучить несколько непохожую методологию - которая вам к стати вряд ли в будущем пригодиться... Это к слову... Если же вам нужно будет описать процесс - то есть во-первых Activity Diagrams в UML, XPD (язык описания процессов на xml) и т.д.


Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма).
График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д.

Ввести сущность график выплат и для него вести историю...


guest_xxx

Статья хороша еще и тем, что решает конкретную задачу - а именно аудит изменений данных. К сожалению, очень часто эта задача путается с ведением истории изменения какой-либо сущности предметной области (см. задачу про кредитный договор)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270467
M.Kap.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuri M.Kap.


Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма).
График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д.

Ввести сущность график выплат и для него вести историю...

В том то и дело, что сущность в БД выражается записью. Нет встроенной возможности создавать "векторные" сущности из многих записей.
Вот кабы, был табличный тип столбца ... а ля create table (col1 table)
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270486
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Уважаемый guest_xxx не считает важным упомянуть что IDEF'ы никакого отношения
> к OOA/OOD не имеют

А что, обязательно должны иметь?

> Ввести сущность график выплат и для него вести историю

Ветвления, индивидуальные, параллельные графики Вы как намерены интерпретировать и описывать? Структуру - в студию.

> Статья хороша еще и тем, что решает конкретную задачу - а именно аудит изменений данных.
> К сожалению, очень часто эта задача путается с ведением истории изменения какой-либо сущности
> предметной области

Никто ничего не путает. Аудит изменений без истории изменений - от лукавого. Это нужно пояснять? Т. е. статья в числе прочего описывает фичу, которая реально хм... скажем корректно: совсем не нужна; вместо этого нужно использовать чуть более сложное и затратное, но логичное и удобное решение.

Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату. Какие требования к структуре данных из этого вытекают, надо пояснять? Кстати, здесь и процессы пригодились: их состояние можно и нужно описывать несколько отлично от состояния сущностей. Так что хм... снова скажем корректно: не подумав Вы о них сказали "вряд ли в будущем пригодится".
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270648
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_20040621 Т. е. статья в числе прочего описывает фичу, которая реально хм... скажем корректно: совсем не нужна; вместо этого нужно использовать чуть более сложное и затратное, но логичное и удобное решение.



Поддерживаю. Просто аудит изменений без четких ответов на вопрос "Кому это надо и как он это будет этим пользоваться" может принести пользу только в удовлетворении параноидальных наклонностей администратора приложения.

Необходимости в логгировании изменений можно избежать, проектируя изначально доступ операциям, приводящим к изменениям в данных, либо же сами операции. Это конечно значительно сложнее, чем просто вести лог изменений, но с точки зрения функциональности куда эффективнее.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270966
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
guest_xxx

А что, обязательно должны иметь?

Если человек использует OOA/OOD, то ему стоит и процесс описывать с помощью методов OOD.

Аудит изменений без истории изменений - от лукавого. Это нужно пояснять?

Все зависит от задачи... Пояснять не надо - мы похоже говорим о разных вещах....

Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату.

Всех/любого объекта?

Так что хм... снова скажем корректно: не подумав Вы о них сказали "вряд ли в будущем пригодится".

Атец, нинадо ничего за меня додумывать - я сказал что учить IDEF только ради описания БП может быть несколько затратным - вот и все.

Ветвления, индивидуальные, параллельные графики Вы как намерены интерпретировать и описывать? Структуру - в студию.

Дальше объяснять?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33270998
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Если человек использует OOA/OOD, то ему стоит и процесс описывать
> с помощью методов OOD.

Задачи нужно решать с помощью предназначенных для этого инструментов.

> Все зависит от задачи...

Ничто здесь от задачи не зависит. Есть наличие аудита и есть его отсутствие. Промежуточных состояний нет.

> Всех/любого объекта?

Да.

> Дальше объяснять?

Конечно. Структура-то где?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271092
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи нужно решать с помощью предназначенных для этого инструментов.

Никто не спорит - в OOD для этого тоже есть инструменты

Ничто здесь от задачи не зависит. Есть наличие аудита и есть его отсутствие. Промежуточных состояний нет.

ясно - дальше обсуждать мне лень

> Всех/любого объекта?

Да.

Зачем?

Конечно. Структура-то где?

Чего струтура? Графика выплат? Вопрос стоял предоставить возможность ведения истории изменения графика выплат - я показал структура, в которой ведется история изменений сущности график выплат. Или нужно еще и структуру самого графика?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271134
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Никто не спорит - в OOD для этого тоже есть инструменты

Воспользоваться готовой _универсальной_ нотацией, видимо, религия не позволяет? Проще пользоваться доморощенными подпорками?

> Чего струтура? Графика выплат?

Не знаю, что Вы намерены рисовать.

> Вопрос стоял предоставить возможность ведения истории изменения графика

Задача - она вот:

Цитата: Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма).
График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д.

Структура будет?

> выплат - я показал структура, в которой ведется история изменений сущности
> график выплат.

Нет, Вы решили абсолютно другую задачу, к графику выплат не имеющую никакого отношения.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271158
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Воспользоваться готовой _универсальной_ нотацией, видимо, религия не позволяет? Проще пользоваться доморощенными подпорками?
По-конкретней - что из этого подпорка? xPDL и/или Activity Diagrams/UML?

Цитата: Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма).
Так понятней?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271180
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> По-конкретней - что из этого подпорка? xPDL и/или Activity Diagrams/UML?

Что из перечисленного - нотация? Не надо путать мягкое с теплым, средство с формальной моделью.

> Так понятней?

В сравнении с чем? Где параллельные графики? Где ветвления?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271220
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В сравнении с чем? Где параллельные графики? Где ветвления?

Историю изменения графиков нашли? Параллельность определяется атрибутом "активен", ветвления есть в такой структуре
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271270
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Историю изменения графиков нашли?

Я бы пока не стал называть это историей изменения графиков.

> Параллельность определяется атрибутом "активен", ветвления есть в такой
> структуре

Как и какие ветвления здесь могут быть описаны?

Как я понял задачу: клиент берет кредит. Предположим, что в рамках кредитного договора он может воспользоваться наиболее удобным для него графиком выплат (условно: график 1, график 2, график n; определяются некой схемой). Причем, возможно, график выплат может меняться (использовать другую схему) в зависимости от, скажем, суммы и сроков очередного взноса (погоды, настроения etc). Хочется иметь 1. реальний график погашения кредита, 2. график платежей.

А на Вашей схеме я не вижу описания графиков как таковых. Где они?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271666
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уважаемый, вам стрелки что ли дорисовать?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271712
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Уважаемый, вам стрелки что ли дорисовать?

Конечно, дорисуйте. Только принципиально это ничего не изменит. Схема не будет отвечать задаче. Еще варианты?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271725
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Схема не будет отвечать задаче. Еще варианты?

Есть вариант - неумение читать схему UML
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271748
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Есть вариант - неумение читать схему UML

На этой мажорной ноте и закончим. Курсы ликбеза закрыты.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271916
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
funikovyuriСхема не будет отвечать задаче. Еще варианты?

Есть вариант - неумение читать схему UML

Было бы что читать. Нарисовали диаграмму классов на уровне Er-диаграммы тока без ключей. А где методы, дорогой друг? Кроме того, диаграмма классов без диаграммы юзкейзов и пр. картинок и текста - это порнографическое изображение структуры данных. Какие объекты создадут разработчики по Вашей модели?
Это по поводу UML.

А по поводу Вашей модели послушайте умного человека - он Вам правду говорит. НА Вашей модельке есть только графики платежей, но не выплат. Напрягите свое воображение и представьте - кастомер выполнил платежи за 3 периода, потом сделал досрочную выплату и потому ему надо поменять схему: уменьшить сумму платежей или сократить число периодов. Кастомеры - это вам не бинарные автоматы, которые могут находится в состоянии "оплатил" - "не оплатил" :-) В вашей схеме такой поток событий просто не предусмотрен.
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33271987
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уж про графики и модели не буду - своих хватает.
Я про другое уж :))

LaoxПоддерживаю. Просто аудит изменений без четких ответов на вопрос "Кому это надо и как он это будет этим пользоваться" может принести пользу только в удовлетворении параноидальных наклонностей администратора приложения.
Ну если никто не пользуется, то пусть администратор и страдает, если у него время есть. Главное, что не мешает никому.
А если не только ему нужно - то ответов то немного получается, а точнее всего два:
1. Просто вести лог изменений данных
2. Восстановить или показать данные в разрезе соответствующего процесса

Кому нужно - на это можно и не отвечать, все-равно разницы нет, директору или логисту :)

LaoxНеобходимости в логгировании изменений можно избежать, проектируя изначально доступ операциям, приводящим к изменениям в данных, либо же сами операции. Это конечно значительно сложнее, чем просто вести лог изменений, но с точки зрения функциональности куда эффективнее.
Я что-то не понял смысла фразы.
Вы хотите так спроектировать процессы, чтобы изменений не было? Так чтоли? Нифига себе!!!
Может вы и сумеете, но у меня любые процессы все-равно рано или поздно ведут к изменениям данных. И уж как бы долго к этому не шло, но посмотреть, чего "наменяли", иногда бывает нужно не зависимо от процессов.

guest_20040621Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату.

> Всех/любого объекта?

Да.

Это уж как-то погорячились.
Зачем мне состояние любого объекта? Незачем!
На сколько это увеличит размер БД? В разы!
На сколько это увеличит сложность разработки и все, что из этого вытекает? В десятки раз!!! (потому что через задницу придется лезть к каждому объекту)

Если вам нравится мазохизм - ваш выбор. Мне - нет. (Это даже и не мазохизм - хуже :). Это скорее всего как раз " удовлетворении параноидальных наклонностей администратора приложения " Или точнее - разработчика-маньяка)
Я уж лучше буду иметь возможность в любой момент включить логирование любой таблицы. А если уж какой-то объект будет требовать ведения всей истории, то уж конкретно для него и будет сие сделано.

-- Tygra's --
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33272011
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Laox

ХМ... Во-первых, дорогой друг, не берите пример с guest'а и уберите подальше ваш менторский тон. Считать всех вокруг тупыми и недалекими - удел как раз таких


теперь по поводу ваших комментариев

Нарисовали диаграмму классов на уровне Er-диаграммы тока без ключей.

Расскажите, а какие еще бывают диаграммы классов? И что значит на уровне ER? У ER какой-то низкий уровень? Если по вашему мнению диаграммы классов отличаются от диаграмм сущностей не настолько насколько хотелось бы - то с этим не ко мне

А где методы, дорогой друг?

Какие еще методы? Мы обсуждение со структуры БД начали вроде или может вам еше формы для ввода данных предоставить?

Кроме того, диаграмма классов без диаграммы юзкейзов и пр. картинок и текста - это порнографическое изображение структуры данных.
Да ну! Сами придумали? Диаграмма классов может являться и является в данном случае, описанием структуры данных, способной хранить информацию, требуемую для решения вашей задачи

Какие объекты создадут разработчики по Вашей модели?

Уважаемый, вдумайтесь в название, это диаграмма классов ! Все еще думаете, какие объекты создадут по ней разработчики?

А по поводу Вашей модели послушайте умного человека - он Вам правду говорит.

guest_xxx известен тем, что никогда ничего конкретного не говорит. Где вы там правду обнаружили мне не ясно...

кастомер выполнил платежи за 3 периода, потом сделал досрочную выплату и потому ему надо поменять схему: уменьшить сумму платежей или сократить число периодов.

Предоставленная структура данных способна удовлетворить это требование. Про сам алгоритм речь вообще не идет

"оплатил" - "не оплатил"

Это у вас вообще откуда всплыло?

В вашей схеме такой поток событий просто не предусмотрен.
Не уточните, почему?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33272083
Laox
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tygra!
Например, есть у меня некая операция, которая имеет паттерн состояний. Переходы между состояниями опередяется как и в какой последовательности отреагируют на факт появления этой операции акторы из некоторой процедуры.
Так вот, вести логирование изменений поля "состояние" просто бессмыслено, если я храню реакцию акторов.

Или еще вариант - у меня есть справочник, который заполняется неким актором. У него работа такая - заполнять этот справочник, ему за это деньги платят, он за эти данные отвечает. Понятно, что людей, исполняющих эту роль будет несколько и они совершенно равноправны друг перед другом. И тут нет нужды вести полный лог изменений в этом справочнике. Достаточно того кто создал, и того кто редактировал. А если другому актору этот справочник интересен, то права ему выдать только на просмотр.

Если данные являются важными и их изменение критично для бизнеса, то тут лучше не логировать изменения, а использовать подход проводок: т.е. сначала создать намерение, в котором все нужные акторы внесут свои поправки и затем это намерение реализуют в изменение. Опять-таки откатить в таком случае можно.
Мне удалось пояснить вопрос смысл фразы?
...
Рейтинг: 0 / 0
Протоколирование изменений в БД
    #33274261
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор Если данные являются важными и их изменение критично для бизнеса, то тут лучше не логировать изменения, а использовать подход проводок: т.е. сначала создать намерение, в котором все нужные акторы внесут свои поправки и затем это намерение реализуют в изменение. Опять-таки откатить в таком случае можно.
Мне удалось пояснить вопрос смысл фразы?
Смысл понят так:
В теоретическом плане все красиво.
В практическом - фантастика. Научная, но все же фантастика.
Потому как на каждую таблицу вы не будете навешивать "подход проводок" - либо система умрет, либо бизнес разорится раньше с такой работой системы, а юзеры повесятся, начальник убъет сначала программиста а потом и сам застрелится :))

авторИли еще вариант - у меня есть справочник, который заполняется неким актором. У него работа такая - заполнять этот справочник, ему за это деньги платят, он за эти данные отвечает. Понятно, что людей, исполняющих эту роль будет несколько и они совершенно равноправны друг перед другом. И тут нет нужды вести полный лог изменений в этом справочнике. Достаточно того кто создал, и того кто редактировал. А если другому актору этот справочник интересен, то права ему выдать только на просмотр.
Ну вам нет нужды вести лог, а кому-то есть. Будем навешивать механизм проводок? :))

=======

Зачем простое превращать в ужасное? :)

ЗЫ
Тяпница - пора домой почти уже.

-- Tygra's --
...
Рейтинг: 0 / 0
69 сообщений из 69, показаны все 3 страниц
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Протоколирование изменений в БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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