gpt4 book ai didi

sql - 跟踪表中的更改

转载 作者:行者123 更新时间:2023-12-04 18:51:44 31 4
gpt4 key购买 nike

我的同事向我提出了一个我无法回答的问题(由于缺乏经验),该问题与跟踪表上相关字段的变化有关。

所以想象一下,我们有 3 个表,每个表有 20 个字段。对于此示例,让我们考虑这些表中的每一个都有 2 个字段,一个名为 LastUpdatedOn,另一个名为 LastUpdatedBy。

如果我们想跟踪这 3 个表中的更改,但仅针对几个特定字段,而不为每个表创建包含更新前最新版本的历史记录表,我们如何跟踪这些相关字段的更改和仍然保持通用?

最佳答案

无需为它们中的每一个创建历史/审计表。您可以拥有一个 单例 table,它存储您要跟踪的字段的表和字段名称:
audit(audit_id, table_name, field_name, action_flg, updated_by, updated_on, val_before, val_after, pk_value1, pk_value2, pk_value3, pk_value4, pk_value5) .

您需要存储表的主键(字段 pk_value1pk_value5 ),以便唯一标识已更改的行。 action_flg如果要跟踪已删除的更新、插入或行,则使用。 Oracle 在其某些产品中使用这种表结构。

例如,假设您有一张表 person(person_id, name, email) ,并且您需要跟踪对字段所做的更改 email :

  • 创建了一个新人 ( id=1 ): insert into audit(1, 'person', 'email', 'A' /* add */, 'USER', '11-03-2011', null, 'email@mail.com', 1, null, null, null, null);
  • 人邮箱1更新:insert into audit(2, 'person', 'email', 'C' /* change */, 'USER', '12-03-2011', 'email@mail.com', 'new_email@mail.com', 1, null, null, null, null);
  • 现在假设人的电子邮件70更新:insert into audit(3, 'person', 'email', 'C' , 'USER', '12-03-2011', 'p70email@mail.com', 'new_p70mail@mail.com', 70, null, null, null, null);
  • 关于sql - 跟踪表中的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5274183/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com