Можно ли иметь отдельный столбец в таблице аудита для хранения имени столбца, чтобы отразить, какие изменения были внесены - PullRequest
0 голосов
/ 08 октября 2018

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

Пример: -

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.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

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

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

0 голосов
/ 08 октября 2018

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

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

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

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

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

...