gpt4 book ai didi

sql-server - 维护为拆分成多个表的实体的审核日志

转载 作者:行者123 更新时间:2023-12-02 04:19:24 25 4
gpt4 key购买 nike

我们有一个实体,分为5个不同的表格。这些表中的3个中的记录是强制性的。其他两个表中的记录是可选的(基于实体的子类型)。

这些表之一被指定为实体主数据。其他四个表中的记录通过master的唯一ID进行键控。

在每个表上都存在更新/删除触发器之后,记录的更改会将历史记录(从触发器内的已删除表中保存)保存到相关的历史记录表中。每个历史记录表都包含相关的实体字段和一个时间戳。

因此,实时记录始终在实时表中,而历史记录/更改在历史记录表中。可以根据时间戳列对历史记录进行排序。显然,时间戳列在历史记录表之间不相关。

现在,对于更困难的部分。

  • 记录最初是在单个事务中插入的。 3或5条记录将在单个事务中写入。
  • 5个表中的任何一个或全部都可以进行个别更新。
  • 所有记录都作为单个事务的一部分进行更新。同样,将在单个事务中更新3或5条记录。
  • 2号可以重复多次。
  • 3号可以重复多次。

  • 该应用程序应基于仅写为单笔交易的记录显示时间点历史记录列表(仅点1,3和5)

    我目前在算法上遇到问题,该算法将仅基于时间戳数据来检索历史记录。

    添加一个HISTORYMASTER表来保存有关事务的额外信息似乎可以部分解决该问题。每次交易前,新记录都会添加到HISTORYMASTER中。在事务期间,新的HISTORYMASTER.ID将保存到每个实体表中。
    可以通过选择特定HISTORYMASTER.ID的第一条记录来检索时间点历史记录(按时间戳记排序)

    对于跨多个表的实体,是否还有其他最佳方法可基于AFTER(更新,删除)触发器来管理审计表?

    最佳答案

    您的HistoryMaster似乎类似于我们如何处理其中一个系统中多个相关项目的历史。通过单点挂起历史记录表中的所有相关更改,可以轻松地创建一个以历史记录母版为中心并附加相关信息的 View 。它还允许您不在不需要审核的历史记录中创建记录。

    在我们的例子中,主表称为EntityAudit(其中实体是保留的“主”项目),所有数据都存储了与审计相关的EntityHistory表。在我们的案例中,我们将数据层用于业务规则,因此很容易将审计规则插入数据层本身。我认为,当且仅当所有修改都使用该数据层时,数据层才是进行此类跟踪的最佳点。如果您有多个使用不同数据层的应用程序(或根本没有),那么我怀疑触发触发器而不是创建主记录几乎是唯一的方法。

    如果您没有其他要在审计中跟踪的信息(例如,我们跟踪进行更改的用户,例如,不在主表中的用户),那么我会考虑将额外的审计ID放在“主”记录本身上。您的描述似乎并不表示您对单个表的微小更改感兴趣,而只是对更新整个实体集的更改感兴趣(尽管我可能会念念它)。不过,如果您不关心较小的修改,我只会这样做。在我们的案例中,我们需要跟踪所有更改,甚至是相关记录。

    请注意,使用审核/主表的优势在于,与源表相比,您对历史记录表所做的更改最小:单个AuditID(在我们的示例中为Guid,尽管在非分布式中自动编号也可以)数据库)。

    关于sql-server - 维护为拆分成多个表的实体的审核日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/457259/

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