首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在审计表中有单独的列来存储列名,以反映所做的更改

是否可以在审计表中有单独的列来存储列名,以反映所做的更改
EN

Stack Overflow用户
提问于 2018-10-08 09:18:24
回答 2查看 114关注 0票数 0

存储列名以表示导致审计的父表中的数据更改是一种良好的做法吗?

例:-

代码语言:javascript
复制
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)
);

--

代码语言:javascript
复制
insert into employee values('215','Mark','Cooper','222-458-254');

这还将导致通过触发器在审计表中插入记录,并在aud_col_changed列中具有空值。

现在当我更新同样的记录时:-

代码语言:javascript
复制
update employee set tel_no='255-458-254' where emp_id='215';

因此,还将为所做的更新创建审计,审计表现在应该包含另一条记录,并包含aud_col_changed列中的值'tel_no‘。

如果一次更改多个列,则在同一字段中用逗号分隔。

如果这是正确的方法,你能描述一下实现它的方法吗?

请注意,我试图实现此方法的表中有18列,其中6-7列是JSON.

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-10 14:41:45

我做了更多的研究,我发现如果我们想要存储列名,那么数据需要通过函数进行更新。在函数中,我们需要检查以NULL传递的每个值。如果它看起来不是null,那么我们需要对列名进行硬编码,并将其赋值给变量。如果找到更多不为空的值,则需要将硬编码的列名追加到主变量,直到我们检查在函数中传递的所有值是否为NULL。这肯定会降低DB的性能,使其在每次更新后运行显然并不可取。

因此,我不喜欢使用audit_col_changed列。

票数 0
EN

Stack Overflow用户

发布于 2018-10-08 10:46:40

您的方法可能很好--您应该指定要对审计表做什么。

就我个人而言,我宁愿有一个审计表是下列之一的表:

  • 每列一行更改,旧值和新值。
  • 一行更改,所有列出现两次,一次用于旧值,一次用于新值。

换句话说,我通常想同时看到新旧价值观。

第一种方法在处理具有不同类型的列时比较棘手。当您想要修改表的结构时,第二个问题是很棘手的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52699038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档