Можно ли иметь отдельный столбец в таблице аудита для хранения имени столбца, чтобы отразить внесенные изменения?

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

Ex :-

create table employee
(
emp_id character varying(10),
fname character varying(30),
lname character varying(30),
tel_no character varying(15)
);

create table aud_employee
(
emp_id character varying(10),
fname character varying(30),
lname character varying(30),
tel_no character varying(15)
aud_col_changed character varying(100)
);

--

insert into employee values('215','Mark','Cooper','222-458-254');

Это также приведет к вставке записи в таблицу аудита через триггер и будет иметь нулевое значение в столбце aud_col_changed.

Теперь, когда я обновляю ту же запись: -

update employee set tel_no='255-458-254' where emp_id='215';

Таким образом, аудит также будет создан для этого сделанного обновления, и теперь таблица аудита должна состоять из другой записи и содержать значение «tel_no» в столбце aud_col_changed.

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

Если это правильный подход, не могли бы вы описать способы его достижения?

Обратите внимание, что таблица, в которой я пытаюсь реализовать этот подход, имеет около 18 столбцов, из которых 6-7 столбцов — это JSON.


person Nik    schedule 08.10.2018    source источник
comment
EventSourcing может быть лучшим решением для вашего варианта использования.... (поиск вокруг, он довольно популярен)   -  person Jaskaranbir Singh    schedule 08.10.2018
comment
Это выглядит хорошо, но столбец тела в таблице событий будет выглядеть как мусор, поскольку у меня есть огромная таблица с несколькими столбцами и с 6-7 столбцами в формате JSON.   -  person Nik    schedule 08.10.2018


Ответы (2)


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

Лично я бы предпочел иметь таблицу, в которой таблица аудита была бы одной из следующих:

  • Изменена одна строка на столбец со старым значением и новым значением.
  • Каждая строка изменяется по одной строке, при этом все столбцы появляются дважды: один раз для старого значения и один раз для нового значения.

Другими словами, я обычно хочу видеть и старые, и новые значения вместе.

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

person Gordon Linoff    schedule 08.10.2018

Я провел еще несколько исследований и обнаружил, что если мы хотим сохранить имя столбца, то эти данные необходимо обновить с помощью функции. В функции нам нужно проверять каждое значение, переданное с NOT NULL. Если он не равен нулю, нам нужно жестко закодировать имя столбца и присвоить его переменной. Если найдено больше значений, которые НЕ NULL, то это жестко запрограммированное имя столбца необходимо добавить к основной переменной, пока мы не проверим все значения, переданные в функцию, с NOT NULL. Это определенно снизит производительность БД, и запуск ее после каждого обновления явно не предпочтителен.

Следовательно, я не предпочитаю использовать столбец audit_col_changed.

person Nik    schedule 10.10.2018