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

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

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

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

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

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

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

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

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

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

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

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

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

Фишка в том, что разработчики в 90% случаев забывают, что бизнесу очень часто надо вносить изменения задним числом. Аудит это одно, историчность это другое.
...
Рейтинг: 0 / 0
Логирование записей
    #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]