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

Откуда:
Сообщений: 37
Товарищи, как лучше спроектировать логирование?
есть несколько таблиц, по которым бы хотелось иметь историю об изменении любого поля(кто, когда).

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

либо сделать отдельную таблицу для этих таблиц куда будут лететь данные об изменениях.

У кого был опыт в данном вопросе, подскажите как вы это решали?
Спасибо!
28 июл 17, 09:18    [20681510]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
Cane Cat Fisher
Member

Откуда:
Сообщений: 1418
iv_roman_vl
Товарищи, как лучше спроектировать логирование?
есть несколько таблиц, по которым бы хотелось иметь историю об изменении любого поля(кто, когда).

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

либо сделать отдельную таблицу для этих таблиц куда будут лететь данные об изменениях.

У кого был опыт в данном вопросе, подскажите как вы это решали?
Спасибо!


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

Можно для каждой таблицы делать ее такую же таблицу-лог с аналогичной структурой, и дополнительными полями - кто, когда, зачем. Громоздко, трудоемко сопровождаемо, но работать будет, и анализировать просто, даже визуально глянуть.

Второй вариант, более красивый - EAV-подобный журнал: таблица, поле, было, стало, кто, когда, зачем. Чуть труднее анализ изменений - запросы к EAV замысловатые могут получиться, зато единообразное решение для всех таблиц БД.

Триггера для этого дела хорошо бы сразу как-то шаблонизировать.
28 июл 17, 10:35    [20681768]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 4631
iv_roman_vl,
Решение сильно зависит от того как вы потом будете использовать этот лог...
Например, хранение только изменённых полей при варианте использования, когда нужно будет получать "состояние всей строки" на момент изменения плохой выбор.
С другой стороны если это просто некий аудит типа "кто поменял значение остатка 1го мая", то сойдёт.
Если нужна история читайте про SCD, если не нужна попробуйте сделать прототип типа EAV (как вам уже посоветовали) только ключ источника добавьте в неё (PK или составной).
28 июл 17, 12:36    [20682313]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
iv_roman_vl
Member

Откуда:
Сообщений: 37
Дедушка, Cane Cat Fisher

Спасибо, большое!!!
Буду читать, смотреть варианты!
28 июл 17, 14:48    [20682973]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
Помидор
Member

Откуда:
Сообщений: 12
все таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.
8 авг 17, 11:48    [20707763]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
hVostt
Member

Откуда:
Сообщений: 11359
iv_roman_vl,

Event Sourcing
8 авг 17, 14:53    [20708604]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
hVostt
Member

Откуда:
Сообщений: 11359
Помидор
все таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.


Фишка в том, что разработчики в 90% случаев забывают, что бизнесу очень часто надо вносить изменения задним числом. Аудит это одно, историчность это другое.
8 авг 17, 14:54    [20708606]     Ответить | Цитировать Сообщить модератору
 Re: Логирование записей  [new]
Помидор
Member

Откуда:
Сообщений: 12
hVostt
Помидор
все таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.


Фишка в том, что разработчики в 90% случаев забывают, что бизнесу очень часто надо вносить изменения задним числом. Аудит это одно, историчность это другое.


Это никоим образом не должно повлиять на историчность данных, наоборот в некоторых случаях очень даже помогает. Для бизнес логики нужно хранить отдельные данные, например start_date, end_date. А для истории надо хранить другие данные, например created_at, updated_at. А для таблицы логирования вообще нужно еще одна колонка для хранения версии или даты создания записи.
8 авг 17, 19:22    [20709324]     Ответить | Цитировать Сообщить модератору
Все форумы / Проектирование БД Ответить