Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Логирование записей / 8 сообщений из 8, страница 1 из 1
28.07.2017, 09:18
    #39496442
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
Товарищи, как лучше спроектировать логирование?
есть несколько таблиц, по которым бы хотелось иметь историю об изменении любого поля(кто, когда).

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

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

У кого был опыт в данном вопросе, подскажите как вы это решали?
Спасибо!
...
Рейтинг: 0 / 0
28.07.2017, 10:35
    #39496509
Cane Cat Fisher
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
iv_roman_vlТоварищи, как лучше спроектировать логирование?
есть несколько таблиц, по которым бы хотелось иметь историю об изменении любого поля(кто, когда).

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

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

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

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

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

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

Триггера для этого дела хорошо бы сразу как-то шаблонизировать.
...
Рейтинг: 0 / 0
28.07.2017, 12:36
    #39496602
Дедушка
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
iv_roman_vl,
Решение сильно зависит от того как вы потом будете использовать этот лог...
Например, хранение только изменённых полей при варианте использования, когда нужно будет получать "состояние всей строки" на момент изменения плохой выбор.
С другой стороны если это просто некий аудит типа "кто поменял значение остатка 1го мая", то сойдёт.
Если нужна история читайте про SCD, если не нужна попробуйте сделать прототип типа EAV (как вам уже посоветовали) только ключ источника добавьте в неё (PK или составной).
...
Рейтинг: 0 / 0
28.07.2017, 14:48
    #39496721
iv_roman_vl
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
Дедушка, Cane Cat Fisher

Спасибо, большое!!!
Буду читать, смотреть варианты!
...
Рейтинг: 0 / 0
08.08.2017, 11:48
    #39501742
Помидор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
все таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.
...
Рейтинг: 0 / 0
08.08.2017, 14:53
    #39501905
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
iv_roman_vl,

Event Sourcing
...
Рейтинг: 0 / 0
08.08.2017, 14:54
    #39501906
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
Помидорвсе таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.

Фишка в том, что разработчики в 90% случаев забывают, что бизнесу очень часто надо вносить изменения задним числом. Аудит это одно, историчность это другое.
...
Рейтинг: 0 / 0
08.08.2017, 19:22
    #39502099
Помидор
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Логирование записей
hVosttПомидорвсе таки лучше создать копию таблицы+дата создания записи. Таким образом можете полностью логировать изменения. Со временем таблица наполнится но это небольшая проблема думаю. MS SQL имеет нативную поддержку если не ошибаюсь.

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

Это никоим образом не должно повлиять на историчность данных, наоборот в некоторых случаях очень даже помогает. Для бизнес логики нужно хранить отдельные данные, например start_date, end_date. А для истории надо хранить другие данные, например created_at, updated_at. А для таблицы логирования вообще нужно еще одна колонка для хранения версии или даты создания записи.
...
Рейтинг: 0 / 0
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Логирование записей / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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