Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Я хочу организовать следующее: при изменении какого-либо поля в какой-либо таблице в клиенте вызывается хранимая процедура, в которую передаются через параметры сведения о имени таблицы, над которой работают, название поля, предыдущее значение, которое передается двумя параметрами: тип и двоичное поле (для возможности хранить данные разных типов), ну и джругую полезную информацию. Целесообразен ли такой механизм или есть более функциональные методы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:02 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
AlexG или есть более функциональные методы? или есть - научитесь излагать свои мысли в терминах и определениях предметной области, которой посвящаете свои изыскания... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:08 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
YBWили есть Что есть-то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 15:22 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
авторЧто есть-то? Есть более функциональные :)) Например на каждую таблицу, которую нужно мониторить, создать копию - но в отдельной базе например, или в этой же, но со спец. именем, чтобы случайно не грохнуть. Потом повесить триггеры, которые и будут отписывать все действия. Ну еще одну таблицу на все, в которой будет писаться, кто и что делал и ссылка на нее из таблицы-дубля, чтобы в каждой не плодить поля "юзер, дата, действие и т.д." Эх, надо сделать отдельным модулем да и выложить мой продукт по мониторингу изменений. Вдруг кому пригодится. В общем, время найду - сделаю и сайтец забабахаю. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:38 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:47 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:51 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> В SQL возникнет туева хуча с трудом разгребаемых траблов. Например? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:57 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой Andres 1+1 вариант: все удаления и изменения заменить добавлением новых записей + 1 поле типа дата-время в каждую таблицу, описывающее момент учетного времени, до которого запись действительна. Проблемы будут с DRI, придется делать триггерами. Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. А в чем сие траблы заключатся? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
дураг с инецеативой Эт кажись, называется "хронологические данные" (temporal data). В SQL возникнет туева хуча с трудом разгребаемых траблов. Да. Что-то будет проще (например, выбрать данные "всё как было 13 числа" или "как часто Боря менял паспорта и фамилии"), что-то станет сложнее (почти всё остальное:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 16:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> что-то станет сложнее (почти всё остальное:) Что "все остальное"? Примеры - в студию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 17:05 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> http://www.dbpd.com/vault/9810snod.html Ну и где траблы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 17:36 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
В Informix для этого есть подсистема аудита. То, что вы предлагаете, возможно и будет работать, но ресурсов сожрет немало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 21:11 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
AlexG ну и джругую полезную информацию И кому эта информация будет интересна? А самое главное чем? Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2005, 23:35 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Laox AlexG ну и джругую полезную информацию И кому эта информация будет интересна? А самое главное чем? Логировать кто последний залез в мою чашку с ногами и плюнул в нее? А толку? Для банка нужно, видимо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 12:08 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
На триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя. В БАС сделали в рабочих таблицах поле DateUser, KodUser, в которые заносятся данные о последних корректировках. Этих данных почти достаточно для выяснения всех спорных систуаций. Но так же нет сведений об удалении. Обходимся путем сравнения с BackUp. Он все равно делается автоматически. Без таких копий все равно работать не прилично. Если уже возникает острая необходимость найти виноватого, то скорее всего шкода такая, что потребуется поднять архивы. Из них видно - что было и что стало. А кто - выясняется в рабочем порядке. А еще каждая хранимая процедура, вызываемая из клиентской машины, имеет параметр KodUser. Если важно то, что она делает, то может занести в журнал работы. На практике тотальная слежка сделана только в одном случае: на рабочем месте кассира по приему платежей от населения, что бы можно было обойтись без кассового аппарата. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2005, 19:45 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 10:33 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Если валить в одно место логи на редактирование/удаление с разных таблиц, то это будет помойка, в которой черт ногу сломит. Ведь если появилась мысль о логгировании изменений, значит это кому то нужно. А следовательно на эту таблицу с логами надо навершивать интерфейсы для просмотра, всякие фильтры и и отчеты, причем такие, чтобы пользователи понимали об чем речь, собственно говоря. На мой взгляд универсализация в этом месте ни к чему хорошему не приведет. Для каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete, кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи. Практика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Полное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 13:39 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
4321 PVPНа триггерах не выйдет. При удалении записи они не знают имя пользователя, который выполняет действие. В записях в этот момент код старого пользователя.кхмм. не подскажете эту чудо-субд, в которой сыршенно невозможно выяснить текущего пользователя? (не важно, раздельна у вас идентификация в субд и в клиенте, или нет)Это чудо MS SQL 2000. Windows Authentication. Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 15:25 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
LaoxДля каждой таблицы нужно сначала ответить на вопросы: кто может делать edit/delete, Это проблемы прав в системе, а не логирования автор кто смотрит логи по этим операциям, надо ли этому товарищу знать предыдущее значение при выполнении редактирования, надо ему ли знать данные удаленной записи. И это тоже. авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. авторПолное логирование всех изменений требуется очень в ограниченных случаях и там лучше создать хистори для отдельной таблицы и сносить в нее запись целиком (или только некоторые поля) при выполнении определенных действий. А вот это правильно. Так и надо делать. И я так и делаю. :) -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 16:22 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
PVPЭто чудо MS SQL 2000. Windows Authentication. Какая функция или глобальная переменная, доступные в триггере, дают информацию о userе, который удалил запись, находящуюся в deleted?мдя. Мои саболезнования. А что, кстати сказать, вернет SELECT CURRENT_USER в этом случае? (любопытно, простите, - давненько я Т-скуль не ковырял) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 16:41 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. -- Tygra's -- ИМХО типовая схема типовой подход - и так все понятно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 17:10 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
YBW tygra авторПрактика показывает, что большей частью на редактирование надо знать "кто папа" (типа кто последний). На удаление - "кто накосячил". В первом случае добавляется поле User ID Edit, во втором операцию "удалить", выполняемую пользователем, заменяете на пробивание флага типа "Deleted" и реальное удаление записей делаете в другой процедуре при выполнении какого-нибудь дополнительного действия типа "проверено - удалять можно". Вы по-русски уж, а то бред какой-то, особенно про удаление. -- Tygra's -- ИМХО типовая схема типовой подход - и так все понятно Ну видимо товарисчу требуетсяч перевод: 1. "Кто папа" - означает "кто последний редактировал запись". В том случае, если имеется n (где n>1) равноправных пользователей, которые могут изменять некоторое поле, неважно знать какое значение было раньше, но важно знать кто последний выполнил апдейт. 2. "Кто накосячил" - означает "кто удалил эту сверхважную запись". В том случае, если имеется n (где n>1) равноправных пользователей которые могут удалять записи, но есть при этом один суперпользователь, который принимает окончательное решение об удалении записи, важно, чтобы случайно не удалили нужную запись. В этом случае простые пользователи ничего не удаляют, а только скидывают в "корзину". А уже суперпользователь выполняет аудит этой корзины и окончательно принимает решение об удалении или восстановлении той или иной записи. К каждой таблице хистори вешать - замучаешься таблицы создавать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 17:58 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
4321А что, кстати сказать, вернет SELECT CURRENT_USER в этом случае?Он вернет dbo ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2005, 20:21 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
авторНу видимо товарисчу требуетсяч перевод: Точно! :)) Тока я не вижу смысла в таком виде якобы "логирования". Лучше ничего, чем так. авторК каждой таблице хистори вешать - замучаешься таблицы создавать :) Так хранимую процедуру напишите да и все. Вы что же, руками чтоли создаете? Зачем уж так. У меня все из интерфейса - список таблиц, какую нужно логировать, нажал на кнопочку - все создалось, и таблица истории, и триггеры, и все что нужно. И даже пишется лог, когда и кто запустил/остановил логирование. И можно посмотреть лог изменений по дате. ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 10:22 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
suser_sname() вернет нужного юзера без проблем. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 10:24 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
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! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2005, 11:07 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
По-моему вопрос не в протоколировании изменений, а в том, что собственно нужно протоколировать. А всякие академические споры, можно ли это сделать на триггерах или на процедурах или вообще не делать - так это фигня. В зависимости от сервера БД можно реализовать практически все что нужно. негатиф, незачот, афтар не пеши больше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 13:02 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Валентин КПо-моему вопрос не в протоколировании изменений, а в том, что собственно нужно протоколировать. А всякие академические споры, можно ли это сделать на триггерах или на процедурах или вообще не делать - так это фигня. В зависимости от сервера БД можно реализовать практически все что нужно. негатиф, незачот, афтар не пеши больше. Вообще-то требование именно такое: хранить все изменения любого поля, проводимые над акционерами; иметь возможность откатить на любую дату, просмотреть кто сделал изменение данного поля и пр. и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 16:25 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Тогда сделать отдельную таблцу, где хранить имя атрибута, юзера и датувремя изменений, вобщем полный хистори над таблицей. Если это глобальная шиза, тогда все справочники хранить по Тецнеру и соответственно также привязать историю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.08.2005, 17:10 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
А как это - "по Тецнеру"? (Или по Тенцеру?) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.08.2005, 11:00 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
У меня реализовано нечто похожее на предложенное Тигрой и Первым Андерсом 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, если не ошибаюсь ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2005, 11:54 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
tygra авторНу видимо товарисчу требуетсяч перевод: ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче. -- Tygra's -- Ну давай уже выложи! А то все обещаешь, да обещаешь... Мне вот, например, было бы очень интересно посмотреть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 15:23 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Почитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 17:50 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Почитайте очень грамотную статью А чего здесь грамотного, можно поинтересоваться? Бред, абсолютно оторванный от реальности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 20:14 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621 А чего здесь грамотного, можно поинтересоваться? Бред, абсолютно оторванный от реальности. О! Узнаю мощный голос guest_xxx... Поинтересоваться то можно - но вы же опять ничего конкретного в ответ не скажите В статье описаны возможные способы организации аудита изменений данных. Под аудитом здесь понимается именно административные средства контроля за данными и к самой архитектуре системы он отношения не имеет. Статья написана для DBA MS SQL сервера, но многое из нее актуально и для других СУБД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 22:46 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> О! Я тоже рад Вас слышать. > В статье описаны возможные способы организации аудита изменений данных. ...абсолютно непригодные для реального применения. > и к самой архитектуре системы он отношения не имеет. Ну почему же? Там вроде было что-то о том, что регистрировались изменения, вносимые пользователями в структуру данных. Хотя, может, и невнимательно читал (жутко неудобно оформлено). > Статья написана для DBA MS SQL сервера Для dba? Не смешно. Для студентов первого курса, - это как бы более целевая аудитория. Собственно, просмотрел текст по диагонали исключительно для того, чтобы иметь представление о том, что это за очень грамотные статьи - и бесплатно. Оказалось - как обычно - бред по мотивам мануалов. Лучше Шуклина читать, - смешнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2005, 23:48 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
funikovyuriПочитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml Приятная статья, правда ниасилил, за время, которое я уделяю на чтение новостей. Хорошо проделанная работа по сбору информации, стиль - присущий женскому обществу - простой и практичный. Комментарии. Изменение метаданных и изменение данных - я считаю вопросами разными с различным подходом в логировании. метаданные. Меня поразила прозаичность решения - сравнить 2 базы, чтобы узнать изменения... кто же так пишет проекты? база данных - это что мусорная куча, куда лезут все кому не лень и меняют структуру, бизнес логику? По моему логировать должны программисты сами, указывая что они для конкретной задачи меняли с кратким описанием. Тогда это будет нормальная хистори. данные. Единственный совет любителям логирования - не перебарщивайте. Концепцию логирования естественно нужно делать на самом высоком уровне централизации лог-событий. Но не стоит включать логирование всего и вся, без причины на это. Поскольку все это утяжеляет работы БД, ее размер и прочее. Всегда нужно искать компромис между скоростью и функционалом, производительностью и стоимостью... немого отвлекся в сторону философии, но так и есть на самом деле... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2005, 14:07 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Сорри не в тот топик... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2005, 14:07 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
goodron tygra авторНу видимо товарисчу требуетсяч перевод: ЗЫ Не, найду время и выложу эту хрень. Пусть кому-то будет легче. -- Tygra's -- Ну давай уже выложи! А то все обещаешь, да обещаешь... Мне вот, например, было бы очень интересно посмотреть. Времени нет, умираю от работы!!!!!!!!!!!!!!!!! Даже форум раз в три дня читаю - вот до чего дошел! :) Обесчаю в октябре выложить. Прямо-таки торжественно клянусь. Со всеми скриптами и т.д. Прямо рабочую систему. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.09.2005, 16:35 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
funikovyuriПочитайте очень грамотную статью http://www.sql.ru/articles/mssql/2005/030701ChangesLogging.shtml Еще не дочитал. Но статья показалась интересной хотя бы с точки зрения систематизации подходов. А вот такой вопрос к уважаемой аудитории. Задачу "журналирования" отдельных записей можно расширить до сохранения версий совокупности записей. Пример из банковской сферы: Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма). График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д. Конечно же версии совокупности записей можно восстановить по версиям записей из этой совокупности. Подобная задача решалась мною и решение оказалось довольно громоздким. Что вы об этом думаете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 13:47 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Задачу "журналирования" отдельных записей можно расширить > до сохранения версий совокупности записей. Это не расширение задачи. Это один из способов ее постановки. Любая база данных должна позволять извлекать состояние объектов на определенную дату. > Конечно же версии совокупности записей можно восстановить по > версиям записей из этой совокупности. Я бы решил эту задачу, описав погашение кредита как процесс. Не вижу проблем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 14:46 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621> Я бы решил эту задачу, описав погашение кредита как процесс. Не вижу проблем. в двух словах , как ты это видишь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 14:53 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> в двух словах , как ты это видишь? Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 17:02 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621> в двух словах , как ты это видишь? Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса. спасибо, посмотрю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 17:10 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621> в двух словах , как ты это видишь? Берем любую подходящую нотацию (например, IDEF3). С идеологической точки зрения операция кредитования (как процесс) не отличается от любого другого технологического процесса. А чем отличаются IDEF1, IDEF2. И вообще, это методология проектирования альтернативная UML ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 17:16 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> А чем отличаются IDEF1, IDEF2. idefinfo.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 17:48 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
По моему это уже флуд, а не обсуждение темы. Для решения такого элементарного действа, как методы логирования на практике все выросло в ахтунг какой-то.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2005, 18:10 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
M.Kap. Берем любую подходящую нотацию (например, IDEF3). Уважаемый guest_xxx не считает важным упомянуть что IDEF'ы никакого отношения к OOA/OOD не имеют так что если у вас они, то придется еще и изучить несколько непохожую методологию - которая вам к стати вряд ли в будущем пригодиться... Это к слову... Если же вам нужно будет описать процесс - то есть во-первых Activity Diagrams в UML, XPD (язык описания процессов на xml) и т.д. Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма). График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д. Ввести сущность график выплат и для него вести историю... guest_xxx Статья хороша еще и тем, что решает конкретную задачу - а именно аудит изменений данных. К сожалению, очень часто эта задача путается с ведением истории изменения какой-либо сущности предметной области (см. задачу про кредитный договор) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2005, 22:19 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
funikovyuri M.Kap. Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма). График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д. Ввести сущность график выплат и для него вести историю... В том то и дело, что сущность в БД выражается записью. Нет встроенной возможности создавать "векторные" сущности из многих записей. Вот кабы, был табличный тип столбца ... а ля create table (col1 table) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 10:25 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Уважаемый guest_xxx не считает важным упомянуть что IDEF'ы никакого отношения > к OOA/OOD не имеют А что, обязательно должны иметь? > Ввести сущность график выплат и для него вести историю Ветвления, индивидуальные, параллельные графики Вы как намерены интерпретировать и описывать? Структуру - в студию. > Статья хороша еще и тем, что решает конкретную задачу - а именно аудит изменений данных. > К сожалению, очень часто эта задача путается с ведением истории изменения какой-либо сущности > предметной области Никто ничего не путает. Аудит изменений без истории изменений - от лукавого. Это нужно пояснять? Т. е. статья в числе прочего описывает фичу, которая реально хм... скажем корректно: совсем не нужна; вместо этого нужно использовать чуть более сложное и затратное, но логичное и удобное решение. Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату. Какие требования к структуре данных из этого вытекают, надо пояснять? Кстати, здесь и процессы пригодились: их состояние можно и нужно описывать несколько отлично от состояния сущностей. Так что хм... снова скажем корректно: не подумав Вы о них сказали "вряд ли в будущем пригодится". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 10:28 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_20040621 Т. е. статья в числе прочего описывает фичу, которая реально хм... скажем корректно: совсем не нужна; вместо этого нужно использовать чуть более сложное и затратное, но логичное и удобное решение. Поддерживаю. Просто аудит изменений без четких ответов на вопрос "Кому это надо и как он это будет этим пользоваться" может принести пользу только в удовлетворении параноидальных наклонностей администратора приложения. Необходимости в логгировании изменений можно избежать, проектируя изначально доступ операциям, приводящим к изменениям в данных, либо же сами операции. Это конечно значительно сложнее, чем просто вести лог изменений, но с точки зрения функциональности куда эффективнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 11:12 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
guest_xxx А что, обязательно должны иметь? Если человек использует OOA/OOD, то ему стоит и процесс описывать с помощью методов OOD. Аудит изменений без истории изменений - от лукавого. Это нужно пояснять? Все зависит от задачи... Пояснять не надо - мы похоже говорим о разных вещах.... Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату. Всех/любого объекта? Так что хм... снова скажем корректно: не подумав Вы о них сказали "вряд ли в будущем пригодится". Атец, нинадо ничего за меня додумывать - я сказал что учить IDEF только ради описания БП может быть несколько затратным - вот и все. Ветвления, индивидуальные, параллельные графики Вы как намерены интерпретировать и описывать? Структуру - в студию. Дальше объяснять? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 12:35 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Если человек использует OOA/OOD, то ему стоит и процесс описывать > с помощью методов OOD. Задачи нужно решать с помощью предназначенных для этого инструментов. > Все зависит от задачи... Ничто здесь от задачи не зависит. Есть наличие аудита и есть его отсутствие. Промежуточных состояний нет. > Всех/любого объекта? Да. > Дальше объяснять? Конечно. Структура-то где? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 12:43 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Задачи нужно решать с помощью предназначенных для этого инструментов. Никто не спорит - в OOD для этого тоже есть инструменты Ничто здесь от задачи не зависит. Есть наличие аудита и есть его отсутствие. Промежуточных состояний нет. ясно - дальше обсуждать мне лень > Всех/любого объекта? Да. Зачем? Конечно. Структура-то где? Чего струтура? Графика выплат? Вопрос стоял предоставить возможность ведения истории изменения графика выплат - я показал структура, в которой ведется история изменений сущности график выплат. Или нужно еще и структуру самого графика? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 13:13 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Никто не спорит - в OOD для этого тоже есть инструменты Воспользоваться готовой _универсальной_ нотацией, видимо, религия не позволяет? Проще пользоваться доморощенными подпорками? > Чего струтура? Графика выплат? Не знаю, что Вы намерены рисовать. > Вопрос стоял предоставить возможность ведения истории изменения графика Задача - она вот: Цитата: Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма). График погашения может меняться. Интерес представляет не знание того как изменилась та или инная дата или сумма, а как изменился график вцелом. Сколько версий графика имеется? и.т.д. Структура будет? > выплат - я показал структура, в которой ведется история изменений сущности > график выплат. Нет, Вы решили абсолютно другую задачу, к графику выплат не имеющую никакого отношения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 13:28 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Воспользоваться готовой _универсальной_ нотацией, видимо, религия не позволяет? Проще пользоваться доморощенными подпорками? По-конкретней - что из этого подпорка? xPDL и/или Activity Diagrams/UML? Цитата: Есть таблица в которой содержится информация о том как будет возвращаться кредит - множество пар (дата,сумма). Так понятней? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 13:34 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> По-конкретней - что из этого подпорка? xPDL и/или Activity Diagrams/UML? Что из перечисленного - нотация? Не надо путать мягкое с теплым, средство с формальной моделью. > Так понятней? В сравнении с чем? Где параллельные графики? Где ветвления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 13:42 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
В сравнении с чем? Где параллельные графики? Где ветвления? Историю изменения графиков нашли? Параллельность определяется атрибутом "активен", ветвления есть в такой структуре ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 13:57 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Историю изменения графиков нашли? Я бы пока не стал называть это историей изменения графиков. > Параллельность определяется атрибутом "активен", ветвления есть в такой > структуре Как и какие ветвления здесь могут быть описаны? Как я понял задачу: клиент берет кредит. Предположим, что в рамках кредитного договора он может воспользоваться наиболее удобным для него графиком выплат (условно: график 1, график 2, график n; определяются некой схемой). Причем, возможно, график выплат может меняться (использовать другую схему) в зависимости от, скажем, суммы и сроков очередного взноса (погоды, настроения etc). Хочется иметь 1. реальний график погашения кредита, 2. график платежей. А на Вашей схеме я не вижу описания графиков как таковых. Где они? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 14:13 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Уважаемый, вам стрелки что ли дорисовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 16:04 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Уважаемый, вам стрелки что ли дорисовать? Конечно, дорисуйте. Только принципиально это ничего не изменит. Схема не будет отвечать задаче. Еще варианты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 16:20 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Схема не будет отвечать задаче. Еще варианты? Есть вариант - неумение читать схему UML ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 16:26 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
> Есть вариант - неумение читать схему UML На этой мажорной ноте и закончим. Курсы ликбеза закрыты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 16:30 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
funikovyuriСхема не будет отвечать задаче. Еще варианты? Есть вариант - неумение читать схему UML Было бы что читать. Нарисовали диаграмму классов на уровне Er-диаграммы тока без ключей. А где методы, дорогой друг? Кроме того, диаграмма классов без диаграммы юзкейзов и пр. картинок и текста - это порнографическое изображение структуры данных. Какие объекты создадут разработчики по Вашей модели? Это по поводу UML. А по поводу Вашей модели послушайте умного человека - он Вам правду говорит. НА Вашей модельке есть только графики платежей, но не выплат. Напрягите свое воображение и представьте - кастомер выполнил платежи за 3 периода, потом сделал досрочную выплату и потому ему надо поменять схему: уменьшить сумму платежей или сократить число периодов. Кастомеры - это вам не бинарные автоматы, которые могут находится в состоянии "оплатил" - "не оплатил" :-) В вашей схеме такой поток событий просто не предусмотрен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 17:13 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Я уж про графики и модели не буду - своих хватает. Я про другое уж :)) LaoxПоддерживаю. Просто аудит изменений без четких ответов на вопрос "Кому это надо и как он это будет этим пользоваться" может принести пользу только в удовлетворении параноидальных наклонностей администратора приложения. Ну если никто не пользуется, то пусть администратор и страдает, если у него время есть. Главное, что не мешает никому. А если не только ему нужно - то ответов то немного получается, а точнее всего два: 1. Просто вести лог изменений данных 2. Восстановить или показать данные в разрезе соответствующего процесса Кому нужно - на это можно и не отвечать, все-равно разницы нет, директору или логисту :) LaoxНеобходимости в логгировании изменений можно избежать, проектируя изначально доступ операциям, приводящим к изменениям в данных, либо же сами операции. Это конечно значительно сложнее, чем просто вести лог изменений, но с точки зрения функциональности куда эффективнее. Я что-то не понял смысла фразы. Вы хотите так спроектировать процессы, чтобы изменений не было? Так чтоли? Нифига себе!!! Может вы и сумеете, но у меня любые процессы все-равно рано или поздно ведут к изменениям данных. И уж как бы долго к этому не шло, но посмотреть, чего "наменяли", иногда бывает нужно не зависимо от процессов. guest_20040621Еще раз: нормально спроектированная база данных обязана позволять извлекать состояние объектов базы данных на любую дату. > Всех/любого объекта? Да. Это уж как-то погорячились. Зачем мне состояние любого объекта? Незачем! На сколько это увеличит размер БД? В разы! На сколько это увеличит сложность разработки и все, что из этого вытекает? В десятки раз!!! (потому что через задницу придется лезть к каждому объекту) Если вам нравится мазохизм - ваш выбор. Мне - нет. (Это даже и не мазохизм - хуже :). Это скорее всего как раз " удовлетворении параноидальных наклонностей администратора приложения " Или точнее - разработчика-маньяка) Я уж лучше буду иметь возможность в любой момент включить логирование любой таблицы. А если уж какой-то объект будет требовать ведения всей истории, то уж конкретно для него и будет сие сделано. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 17:39 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Laox ХМ... Во-первых, дорогой друг, не берите пример с guest'а и уберите подальше ваш менторский тон. Считать всех вокруг тупыми и недалекими - удел как раз таких теперь по поводу ваших комментариев Нарисовали диаграмму классов на уровне Er-диаграммы тока без ключей. Расскажите, а какие еще бывают диаграммы классов? И что значит на уровне ER? У ER какой-то низкий уровень? Если по вашему мнению диаграммы классов отличаются от диаграмм сущностей не настолько насколько хотелось бы - то с этим не ко мне А где методы, дорогой друг? Какие еще методы? Мы обсуждение со структуры БД начали вроде или может вам еше формы для ввода данных предоставить? Кроме того, диаграмма классов без диаграммы юзкейзов и пр. картинок и текста - это порнографическое изображение структуры данных. Да ну! Сами придумали? Диаграмма классов может являться и является в данном случае, описанием структуры данных, способной хранить информацию, требуемую для решения вашей задачи Какие объекты создадут разработчики по Вашей модели? Уважаемый, вдумайтесь в название, это диаграмма классов ! Все еще думаете, какие объекты создадут по ней разработчики? А по поводу Вашей модели послушайте умного человека - он Вам правду говорит. guest_xxx известен тем, что никогда ничего конкретного не говорит. Где вы там правду обнаружили мне не ясно... кастомер выполнил платежи за 3 периода, потом сделал досрочную выплату и потому ему надо поменять схему: уменьшить сумму платежей или сократить число периодов. Предоставленная структура данных способна удовлетворить это требование. Про сам алгоритм речь вообще не идет "оплатил" - "не оплатил" Это у вас вообще откуда всплыло? В вашей схеме такой поток событий просто не предусмотрен. Не уточните, почему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 17:48 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
Tygra! Например, есть у меня некая операция, которая имеет паттерн состояний. Переходы между состояниями опередяется как и в какой последовательности отреагируют на факт появления этой операции акторы из некоторой процедуры. Так вот, вести логирование изменений поля "состояние" просто бессмыслено, если я храню реакцию акторов. Или еще вариант - у меня есть справочник, который заполняется неким актором. У него работа такая - заполнять этот справочник, ему за это деньги платят, он за эти данные отвечает. Понятно, что людей, исполняющих эту роль будет несколько и они совершенно равноправны друг перед другом. И тут нет нужды вести полный лог изменений в этом справочнике. Достаточно того кто создал, и того кто редактировал. А если другому актору этот справочник интересен, то права ему выдать только на просмотр. Если данные являются важными и их изменение критично для бизнеса, то тут лучше не логировать изменения, а использовать подход проводок: т.е. сначала создать намерение, в котором все нужные акторы внесут свои поправки и затем это намерение реализуют в изменение. Опять-таки откатить в таком случае можно. Мне удалось пояснить вопрос смысл фразы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2005, 18:21 |
|
||
|
Протоколирование изменений в БД
|
|||
|---|---|---|---|
|
#18+
автор Если данные являются важными и их изменение критично для бизнеса, то тут лучше не логировать изменения, а использовать подход проводок: т.е. сначала создать намерение, в котором все нужные акторы внесут свои поправки и затем это намерение реализуют в изменение. Опять-таки откатить в таком случае можно. Мне удалось пояснить вопрос смысл фразы? Смысл понят так: В теоретическом плане все красиво. В практическом - фантастика. Научная, но все же фантастика. Потому как на каждую таблицу вы не будете навешивать "подход проводок" - либо система умрет, либо бизнес разорится раньше с такой работой системы, а юзеры повесятся, начальник убъет сначала программиста а потом и сам застрелится :)) авторИли еще вариант - у меня есть справочник, который заполняется неким актором. У него работа такая - заполнять этот справочник, ему за это деньги платят, он за эти данные отвечает. Понятно, что людей, исполняющих эту роль будет несколько и они совершенно равноправны друг перед другом. И тут нет нужды вести полный лог изменений в этом справочнике. Достаточно того кто создал, и того кто редактировал. А если другому актору этот справочник интересен, то права ему выдать только на просмотр. Ну вам нет нужды вести лог, а кому-то есть. Будем навешивать механизм проводок? :)) ======= Зачем простое превращать в ужасное? :) ЗЫ Тяпница - пора домой почти уже. -- Tygra's -- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2005, 16:36 |
|
||
|
|

start [/forum/topic.php?all=1&fid=32&tid=1545667]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
48ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
112ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 475ms |

| 0 / 0 |
