存储列名以表示导致审计的父表中的数据更改是一种良好的做法吗?
例:-
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';因此,还将为所做的更新创建审计,审计表现在应该包含另一条记录,并包含aud_col_changed列中的值'tel_no‘。
如果一次更改多个列,则在同一字段中用逗号分隔。
如果这是正确的方法,你能描述一下实现它的方法吗?
请注意,我试图实现此方法的表中有18列,其中6-7列是JSON.。
发布于 2018-10-10 14:41:45
我做了更多的研究,我发现如果我们想要存储列名,那么数据需要通过函数进行更新。在函数中,我们需要检查以NULL传递的每个值。如果它看起来不是null,那么我们需要对列名进行硬编码,并将其赋值给变量。如果找到更多不为空的值,则需要将硬编码的列名追加到主变量,直到我们检查在函数中传递的所有值是否为NULL。这肯定会降低DB的性能,使其在每次更新后运行显然并不可取。
因此,我不喜欢使用audit_col_changed列。
发布于 2018-10-08 10:46:40
您的方法可能很好--您应该指定要对审计表做什么。
就我个人而言,我宁愿有一个审计表是下列之一的表:
换句话说,我通常想同时看到新旧价值观。
第一种方法在处理具有不同类型的列时比较棘手。当您想要修改表的结构时,第二个问题是很棘手的。
https://stackoverflow.com/questions/52699038
复制相似问题